WithAddStructReferencedObjects
是什么
成员内部属性防止GC.
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| USTRUCT() struct FTestNetSerializeSharedPtrContainer { GENERATED_USTRUCT_BODY()
uint32 CounterUniqueID = 0; TSharedPtr<FTestNetSerializeSharedPtrBase> Data;
bool NetSerialize(FArchive& Ar, UPackageMap* Map, bool& bOutSuccess);
bool Identical(const FTestNetSerializeSharedPtrContainer* Other, uint32 PortFlags) const; void AddStructReferencedObjects(); };
template<> struct TStructOpsTypeTraits< FTestNetSerializeSharedPtrContainer > : public TStructOpsTypeTraitsBase2< FTestNetSerializeSharedPtrContainer > { enum { WithNetSerializer = true, WithIdentical = true, WithCopy = true, WithAddStructReferencedObjects = true }; };
|
将WithAddStructReferencedObjects
映射到EStructFlags::STRUCT_AddStructReferencedObjects
在构建TCppStructOps
时候会生成对应的枚举值:
image-20240418164902886
UScriptStruct::PrepareCppStructOps
中判断是否包含WithAddStructReferencedObjects
.
image-20240418164734719
调用堆栈:
image-20240418164953998
image-20240418165846922
获取函数指针, 并存储.
image-20240418170448419
最终调用的是:CPPSTRUCT::AddStructReferencedObjects
image-20240418170510859
提取之前存储的函数指针, 并进行调用.
image-20240418170823523
堆栈:
image-20240418171259954