我在整个应用程序中使用 Boost/shared_ptr 指针。当对对象的最后一个引用被释放时,shared_ptr 将为我删除该对象。应用程序中的对象订阅应用程序中心位置的事件,类似于观察者/订阅者模式。
在对象析构函数中,对象将从订阅列表中取消订阅。订阅列表本质上只是一个list<weak_ptr<MyObject> >
. 我想做的是与此类似的事情:
Type::~Type()
{
Subscriptions::Instance()->Remove(shared_from_this());
}
我的问题是不能在析构函数中调用 shared_from_this ,所以上面的代码会抛出异常。
在我的旧实现中,订阅列表只是一个指针列表,然后它就起作用了。但我想改用weak_ptr 引用来降低我通过手动内存管理搞砸内存的风险。
由于我依赖 shared_ptr 来执行对象删除,因此我的代码中没有一个地方可以逻辑地调用 Unsubscribe。
关于在这种情况下该怎么做的任何想法?