我发现在一个类的析构函数中,调用 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_;
};
如何在上述示例中实现析构函数?