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:对象创建和初始化

UE4 Unlua源码解析6 - UUnLuaManager内重要方法逐行解释

UE4 Unlua源码解析6 - UUnLuaManager内重要方法逐行解释