私はクラスからデストラクタでshared_from_thisを呼び出すことが許可されていないことが判明:ブーストshared_from_thisとデストラクタ
https://svn.boost.org/trac/boost/ticket/147
この動作は仕様です。デストラクタはオブジェクトを破壊するので、デストラクタが終了すると束縛されるので、shared_ptrを作成するのは安全ではありません。
私は引数を理解していますが、参照をクリーンアップするための "shared_from_this"ポインタが必要な場合はどうなりますか?ここで
class A{
public:
A(Manager * m) : m_(m) {
m_->add(this);
}
~A() {
m_->remove(this);
}
private:
Manager * m_;
};
私は共有ポインタに翻訳しようとしています。ここ
は、私はshared_ptrのを使用していない例です。しかし、私はデストラクタを完了するための良い方法を見つけることができません。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_;
};
どのように私は、上記の例でデストラクタを実装することができますか?
私は新しいタグを作成したい:weak-ptr-of-enabled-of-this-from-this – curiousguy