Ue4_UProperty使用情况

1.UObject 类型指针变量标记UPROPERTY与不标记区别

注:标记UPROPERTY 会自动加入root set 阻止垃圾回收

一个Up标记object类指针变量,当指向null时,object会进行析构,自动进行垃圾回收

一个非标记的object类变量,当未添加AddToRoot时,会被下一次垃圾回收,留下野指针。

2.TWeakObject 

如一个TWeakObject 标记UPROPETY,会阻止正常的GC,延长其生命周期,除主动指定为Null,不会被垃圾回收

不被UPROPETY标记,不会阻止垃圾回收,被垃圾回收后返回可用isvaild 判断,不会产生野指针

例:使用非UPOPERTY TWeakObject情况

射击游戏类中发射子弹,击中销毁,未击中的情况可正常垃圾回收

 

TArray情况-一个UPROPETY标记内置容器,清空数组的过程中会自动置空进行析构
    非标记UPROPETY变量,自动被垃圾回收后,但指针并非空,出现野指针,可能出现崩溃
 

虚幻引擎垃圾回收机制

虚幻实现垃圾回收机制,不再被引用或已被显式标记为销毁的`UObject`将定期清除。引擎构建一个引用图表以确定哪些`UObject`仍在使用,哪些是孤立的。

在该图表根部是一组指定为"根集"的`UObject

任何`UObject`都可以添加到根集。当进行垃圾回收时,引擎将从根集开始,搜索已知`UObject`引用树来跟踪所有引用的`UObject

任何未被引用的`UObject`(意味着未在树搜索中找到这些对象)将被假设为不再需要,因此被删除。

你通常需要保持对希望保持活跃的任何Object的`UPROPERTY`引用,或者将指向它的指针存储在`TArray`或其他引擎容器类中。

 

参考:

虚幻Object处理 | 虚幻引擎文档 (unrealengine.com)

posted on 2022-05-03 11:28  Animer  阅读(539)  评论(0编辑  收藏  举报