在析构函数中替代shared_from_this

时间:2014-03-04 16:12:59

标签: c++11 weak-ptr

class A
{
   std::set<std::weak_ptr<B>, std::owner_less<std::weak_ptr<B>>> m_coll;
public:
   remove(const std::weak_ptr<B> &refWptrB);
}

class B : public std::enable_shared_from_this<B>
{
   ~B() { sharedPtrOfA->remove(shared_from_this()); }
}

虽然我不能在dtor中使用shared_from_this(),但这似乎是一个有效的用例,如A::remove()我不关心存储指针的内存,只关注引用计数块位置我认为std::owner_lessstd::owner_before工作。

我可以考虑其他选择:

(a)使用延迟清除(例如,如果您发现通过锁定获得的shared_ptr为null / false,则稍后迭代A::m_coll,然后从集合中删除weak_ptr)。

(b)将weak_ptr存储在B本身{通过shared_from_this()}获取,并将其传递给A::remove(..)中的B

但是有没有通过已知的习惯用法实现的解决方案(例如,如果标准要求将weak_ptr存储在std::enable_shared_from_this中,那么我可以在B的dtor中访问它并完成工作)?

{顺便说一下我不能用上面的(a)因为我需要在B中的A::m_coll被销毁时立即触发很多事情。}

0 个答案:

没有答案