自定义F类中U类指针管理(UEC++CollectGarbage)
UObject 系统和垃圾回收
UObject:UObject及子类由UE的垃圾回收(GC)系统管理。UE使用引用计数来跟踪对象的生命周期。当一个UObject实例不再被任何强引用持有时,GC会将其标记为可回收。
标记-清除(Mark-and-Sweep):UE的GC系统采用标记-清除算法,这类似于C#和Java的GC机制。在GC周期中,活跃对象被标记,然后未标记的对象被清除。
使用AddToRoot方法将对象添加到根集合中可以防止对象被垃圾回收。然而,如果不小心使用AddToRoot,可能会导致内存泄漏。
正确地使用AddToRoot和RemoveFromRoot:确保在适当的时机调用RemoveFromRoot,从根集合中移除对象。如果没有及时移除对象,即使你不再需要该对象,它也不会被垃圾回收。
使用AddToRoot时:
1、需要特别注意避免循环引用。如果存在循环引用,对象将永远无法被垃圾回收,从而导致内存泄漏。
2、一般只有在确实需要在整个应用程序生命周期内保持对象,对于临时对象或生命周期较短的对象并不需要使用AddToRoot。
(如果使用AddToRoot的对象涉及异步操作(如异步加载资源),需要确保在异步操作完成后手动调用RemoveFromRoot)
重写AddReferencedObjects函数
给需要不回收的U类打上标记如下图