Unreal 中写 C++ 代码需要注意引擎的垃圾回收机制

389 阅读1分钟

引擎创建的对象和自己手动直接或间接通过 NewObject 创建的对象会受 Unreal 垃圾回收器的管理,纯 C++ 类可以自己通过 delete 或智能指针释放资源。

通过 NewObject 创建 UObject 实例

image.png

UPROPERTY 宏定义和虚幻引擎中的容器

上方有 UPROPERTY 宏定义的属性成员不需要手动释放,垃圾管理器 GC 会在适当时机把不再被引用到的对象销毁掉。UPROPERTY 宏定义支持虚幻引擎的 TArray、TMap、TSet 等容器,也就是这些容器里的 UObject 资源会被垃圾回收器追踪和管理。

image.png

调用 AddToRoot 方法防止引用的资源被提前销毁

由于 UPROPERTY 宏定义不支持类静态属性,可能会出现指针指向的资源提前被 GC 释放掉的问题。可以通过调用 UObject 的方法 AddToRoot 添加到根集合中,防止引用的资源被提前销毁。

image.png

image.png

参考资料

# UE5 UObject的回收和GC介绍
# UE4的垃圾回收