UE4 - 为啥 UObject 的 TArray 会被垃圾收集?
Posted
技术标签:
【中文标题】UE4 - 为啥 UObject 的 TArray 会被垃圾收集?【英文标题】:UE4 - Why TArray of UObject are garbage collected?UE4 - 为什么 UObject 的 TArray 会被垃圾收集? 【发布时间】:2019-02-15 15:46:41 【问题描述】:我对垃圾收集器有一些问题,但我不明白为什么?
我在 GameInstance 中创建并存储了一个名为“WorldModel”的 UObject(带有 UPROPERTY 的指针)。
在这个“WorldModel”UObject 中,我有一个名为“WorldPlayerModel”(TArray) 的 UObject 数组,带有 UPROPERTY 宏。
当我加载一张新地图时,我的“WorldModel”仍然在这里,“WorldPlayerModel”的数组也在这里,但其中的所有 UObject 都被垃圾收集器销毁并为空。
根据文档,我的 UObjects 不应该被销毁,所以我不明白为什么?
感谢您的帮助。
【问题讨论】:
【参考方案1】:感谢您的链接。我真的不明白为什么它可以使用自定义名称,但我发现了我真正的问题:数组中的 UObjects 是使用在新地图加载期间被破坏的 Outer 创建的......现在看起来没问题。
【讨论】:
【参考方案2】:奇怪...很久以前就有人问过同样的问题:https://answers.unrealengine.com/questions/410789/tarray-of-uobjects-getting-garbage-collected.html; 尝试命名您的对象(至少尝试他的解决方案,即使这只是一种解决方法)
【讨论】:
【参考方案3】:即使我遵循解决方法,我仍然会崩溃。 所以我在 .h 中声明 eash UObject 就像 财产() UObject* aObj;
属性() UObject* bObj;
就我而言,我重用了那些 uobject。
【讨论】:
以上是关于UE4 - 为啥 UObject 的 TArray 会被垃圾收集?的主要内容,如果未能解决你的问题,请参考以下文章
UE4 C++入门之路7-UObject,AActor,UActorComponent,UStruct介绍,生命周期介绍
UE4 C++入门之路7-UObject,AActor,UActorComponent,UStruct介绍,生命周期介绍
《InsideUE4》UObject类型系统代码生成重构-UE4CodeGen_Private
ue4 NewObject/StaticConstructObject_Internal/StaticAllocateObject/FObjectInitializer:对象创建和初始化