【发布时间】:2011-12-14 08:38:03
【问题描述】:
发现类的析构函数中不允许调用shared_from_this:
https://svn.boost.org/trac/boost/ticket/147
此行为是设计使然。由于析构函数会破坏对象,因此为它创建 shared_ptr 是不安全的,因为一旦析构函数结束,它将变得悬空。
我理解这个论点,但如果我需要一个“shared_from_this”指针来清理引用(而不是共享所有权)。
这是一个我没有使用 shared_ptr 的示例:
class A{
public:
A( Manager * m ) : m_(m) {
m_->add(this);
}
~A() {
m_->remove(this);
}
private:
Manager * m_;
};
这里我尝试将它翻译成共享指针。但是我找不到完成析构函数的好方法:
class A : public boost::enable_shared_from_this< A > {
public:
typedef boost::shared_ptr< A > Ptr;
static Ptr create( Manager * m ) {
Ptr p( new A(m));
p->init();
return p;
}
~A() {
// NON-WORKING
// m_->remove( shared_from_this() );
}
private:
A( Manager * m ) : m_(m) { }
void init() {
m_->add(shared_from_this());
}
Manager * m_;
};
如何实现上例中的析构函数?
【问题讨论】:
-
我想创建新标签:misuse-of-weak-ptr misunderstanding-of-enabled-shared-from-this
标签: c++ boost shared-ptr object-lifetime weak-ptr