禁止对变体的浅拷贝调用OH_AbilityRuntime_ModObjDispatcher_VariantClear。如果执行了 Variant v2 = v1,只能清理其中一个。
typedef struct {...} OH_AbilityRuntime_ModObjDispatcher_Variant 定义使用联合体加类型标签的变体结构,通过类型标签区分实际数据类型,用于在参数传递和返回值接收中安全传递多种类型的值。
变体值由vt字段决定实际存储的数据类型和联合体中有效的成员。
当变体持有堆分配资源(如字符串、容器句柄)时,需调用OH_AbilityRuntime_ModObjDispatcher_VariantClear释放。
简单类型(布尔、整数、浮点数)不持有堆资源,无需调用OH_AbilityRuntime_ModObjDispatcher_VariantClear释放。
禁止对变体的浅拷贝调用OH_AbilityRuntime_ModObjDispatcher_VariantClear。如果执行了 Variant v2 = v1,只能清理其中一个。
起始版本: 26.0.0
相关模块: AbilityRuntime
所在头文件: modular_object_dispatcher.h
| 名称 | 描述 |
|---|---|
| OH_AbilityRuntime_ModObjDispatcher_ValueType vt | 变体类型标签,决定联合体中有效的成员。 起始版本: 26.0.0 |
| uint64_t reserved1 | 保留字段1。预留空间供后续版本扩展使用,调用方应将其初始化为0,且不应读取或修改。 起始版本: 26.0.0 |
| uint64_t reserved2 | 保留字段2。预留空间供后续版本扩展使用,调用方应将其初始化为0,且不应读取或修改。 起始版本: 26.0.0 |
| uint64_t reserved3 | 保留字段3。预留空间供后续版本扩展使用,调用方应将其初始化为0,且不应读取或修改。 起始版本: 26.0.0 |
union { void* pvoidVal; bool boolVal; int8_t i8Val; int16_t i16Val; int32_t i32Val; int64_t i64Val; uint8_t u8Val; uint16_t u16Val; uint32_t u32Val; uint64_t u64Val; float f32Val; double f64Val; int32_t enumVal; char* bstrVal; OH_AbilityRuntime_ModObjDispatcher_ArrayHandle parrayVal; OH_AbilityRuntime_ModObjDispatcher_VectorHandle pvectorVal; OH_AbilityRuntime_ModObjDispatcher_SetHandle psetVal; OH_AbilityRuntime_ModObjDispatcher_MapHandle pmapVal; OH_AbilityRuntime_ModObjDispatcher_StructHandle pstructVal; OHIPCRemoteProxy* premoteProxyVal; OHIPCRemoteStub* premoteStubVal; } u | 变体值数据联合体。有效的成员由vt决定。 pvoidVal:void指针。 boolVal:布尔值。 i8Val:8位有符号整数。 i16Val:16位有符号整数。 i32Val:32位有符号整数。 i64Val:64位有符号整数。 u8Val:8位无符号整数。 u16Val:16位无符号整数。 u32Val:32位无符号整数。 u64Val:64位无符号整数。 f32Val:32位浮点数(单精度)。 f64Val:64位浮点数(双精度)。 enumVal:枚举值,以int32_t形式存储。 bstrVal:UTF-8字符串句柄,指向堆分配的字符串。 parrayVal:数组句柄。 pvectorVal:向量句柄。 psetVal:集合句柄。 pmapVal:映射句柄。 pstructVal:结构体句柄。 premoteProxyVal:远端Proxy对象句柄。 premoteStubVal:远端Stub对象句柄。 起始版本: 26.0.0 |