静态成员变量持有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
来一发吐槽