shared_ptr之谜

时间:2010-10-06 08:09:47

标签: boost shared-ptr ace

我正在使用ACE框架,但我会尝试描述我的问题而不参考它。

我有一个事件处理程序(从ACE_Event_Handler派生的类)。 对事件处理程序的引用由shared_ptr的映射中的某个管理器类保存。

在某些时候我想:

  1. 从经理地图中删除事件处理程序
  2. 事件处理程序的某些方法应由第3类调用,该类保存指向事件处理程序的行指针(对于那些熟悉ACE的人,它是由ACE Reactor调用的handle_close())
  3. 问题在于未承诺订单(1)和(2)。如果在(2)之前调用(1),则(2)将在悬空事件处理程序上工作。

    所以我考虑添加一些对将在(2)中递减的事件处理程序的附加引用。

    怎么做? 是否可以在事件处理程序本身内维护对事件处理程序的引用(可能使用enable_shared_from_this)?

    由于

1 个答案:

答案 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,也许您会找到对您有用的内容。