[unreal] 关于内存机制的一个坑

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZJU_fish1996/article/details/79953379

        最近刚开始接触unreal,  由于时间比较赶没有系统学习就开始做项目了。中途遇到的bug多之又多。

        遇到的其中一个bug是:一开始经过测试,模块A是好的,于是开始写和模块A关联不大的模块B,C,D……突然有一天,模块A开始不定期出现崩溃,经过断点发现是断在执行的tick函数里,一开始给某个成员对象绑定了一个函数,每帧都去访问这个绑定的函数,但是会突然取不到这个函数,就会崩溃。

        除了一开始初始化绑定函数外,整个项目没有地方修改过这个函数,浪费了差不多半天的时间确认不是自己误改了这个成员变量的绑定函数,能够想到的唯一可能性就是这个绑定函数被ue4的内存回收机制清理了,带着这种猜想,给这个函数加上了UFUNCTION()宏,果然报错就没有再出现了!

        因为项目涉及到场景的动态生成,之前自己写了个管理的类,由这个类来生成管理所有的对象,一直平安无事,刚刚又发生了空指针报错崩溃。这时候回去看了一下自己新建出来的actor数组,果然没有保护宏,给TArray加上了UPROPERTY()的宏,一切又回归正常了。

        总之如果不是组件化管理(AddToRoot)的常驻对象,都尽可能用宏包裹起来,告诉ue4这个东西不要随便收走了。否则随着项目复杂,这种问题会慢慢浮出水面。

猜你喜欢

转载自blog.csdn.net/ZJU_fish1996/article/details/79953379
今日推荐