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`或其他引擎容器类中。
参考: