我有一个派生自 std::enable_shared_from_this 的类。所有类对象都由共享指针管理,因此当没有更多共享指针指向它们时,它们会自动销毁。
我有一个类方法,它从程序的数据结构中删除了一些共享指针,并且存在删除所有指向“this”的共享指针的风险,即调用类方法的对象。
问题是,如果真的所有指针都被删除了,是否有可能在方法运行时对象被销毁,并且“this”指针变得无效?如果我想确保它不会发生,我可以信任系统还是必须在方法内部创建一个 shared_ptr 到“this”,以保持对象处于活动状态,直到我完成它?(然后如果没有更多的指针,一旦方法执行结束就可以将其销毁)
例子:
class SharedObj : public std::enable_shared_from_this<SharedObj>
{
/* ... */
void do_something(SharedObj& a, SharedObj& b);
std::shared_ptr<SharedObj> child;
};
void SharedObj::do_something(SharedObj& a, SharedObj &b)
{
/* ... */
a.remove_child();
b.remove_child();
}
如果只有 a 和 b 有一个 shared_ptr 指向“this”,那么在两个 remove_child() 行之后,就没有指向“this”的共享指针,所以它应该被自动销毁