ue4 小知识点Uobject 对象的垃圾回收

    技术2024-06-12  91

    UObject * a;

    UObject对象和普通的c++对象最大的不同:UObject对象在没有任何引用的时候会被ue4自动回收,而c++对象在你不需要的时候手动回收,你不回收没人帮你回收,你不回收,就会造成内存泄漏。(俗话:一个是哎没人用,收了,一个是跟我有毛关系,不管)

    看起来ue4的机制非常不错,但是具体用的时候,比如你创建完一个UObject对象,没有立即引用,等过一会再用,被回收了,你再用的时候你以为他还在,所以就野指针了。

    所以我们创建完UObject对象之后,要在他作用域内要保持他,不让回收。(听起来,和ue4的机制很矛盾)

    两种方法保持

    1、在继承UObject类的 类中,比如C类,一个UObject * a 变量 用UPROPERTY宏标记一下,则此变量不会被自动回收。而在C类对象destroy的时候a会设置为null,引用消失,a被ue4自动回收。

    2、在普通c++类中,UObject * a;变量 NewObject   完之后,addToRoot就不会被自动删除,需要del的时候RemoveFromRoot就行。

    Processed: 0.011, SQL: 9