UE踩坑记

静态成员变量持有Slate的Shared智能指针造成UE编辑器退出时崩溃

playerzhou 无回复

问题

  • 退出编辑器时析构Slate对象时触发崩溃

原因

  • 通过崩溃堆栈发现,析构该Slate对象的时间点是发生在一个单例类A的析构函数时,该单例类A使用Shared智能指针持有Slate对象,而析构时该Slate对象会访问另一个单例类B,此时B已经失效,造成崩溃
  • 由于全局变量的析构顺序并不固定,因此A和B的析构顺序并不固定,而Shared智能指针使得在A析构前,A持有的Slate对象不会析构,若B在A之前析构,Slate对象的析构又依赖于B,就会造成崩溃

解决方案

  • 使用WeakPtr代替SharedPtr

来一发吐槽

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据