我正在使用ACE框架,但我会尝试描述我的问题而不参考它。
我有一个事件处理程序(从ACE_Event_Handler派生的类)。 对事件处理程序的引用由shared_ptr的映射中的某个管理器类保存。
在某些时候我想:
问题在于未承诺订单(1)和(2)。如果在(2)之前调用(1),则(2)将在悬空事件处理程序上工作。
所以我考虑添加一些对将在(2)中递减的事件处理程序的附加引用。
怎么做? 是否可以在事件处理程序本身内维护对事件处理程序的引用(可能使用enable_shared_from_this)?
由于
答案 0 :(得分:1)
在成员变量中保持共享指针将失去shared_ptr的目的,因为你需要以某种方式告知对象不再需要它(这就是“删除obj”,我们试图避免使用智能指针)
作为解决方案之一:如果可能的话,用shared_ptr(或weak_ptr)替换第3类中的原始指针。
其他解决方案在很大程度上取决于您的应用程序的设计,例如,您可以通过某种方式强制从管理器中删除指针的顺序...
尝试调查此文档http://www.boost.org/doc/libs/1_43_0/libs/smart_ptr/sp_techniques.html,也许您会找到对您有用的内容。