`enable_shared_from_this` の有用性は何ですか? 質問する

`enable_shared_from_this` の有用性は何ですか? 質問する

Boost.Asio の例を読んでいるときに偶然この例に遭遇しましたenable_shared_from_thisが、ドキュメントを読んでも、これを正しく使用する方法がまだわかりません。このクラスを使用する意味がある例と説明を誰か教えていただけませんか。

ベストアンサー1

これによって、しか持っていない場合でもshared_ptrへの有効なインスタンスを取得できます。これがなければ、をメンバーとして持っていない限り、への を取得する方法はありません。thisthisshared_ptrthisenable_shared_from_this の boost ドキュメント:

class Y: public enable_shared_from_this<Y>
{
public:

    shared_ptr<Y> f()
    {
        return shared_from_this();
    }
}

int main()
{
    shared_ptr<Y> p(new Y);
    shared_ptr<Y> q = p->f();
    assert(p == q);
    assert(!(p < q || q < p)); // p and q must share ownership
}

メソッドは、メンバー インスタンスがない場合でも、f()有効な を返します。次のように単純に実行できないことに注意してください。shared_ptr

class Y: public enable_shared_from_this<Y>
{
public:

    shared_ptr<Y> f()
    {
        return shared_ptr<Y>(this);
    }
}

これによって返される共有ポインターは、「適切な」参照カウントとは異なる参照カウントを持ち、オブジェクトが削除されると、そのうちの 1 つが失われ、ぶら下がった参照が保持されることになります。

enable_shared_from_thisC++ 11 標準の一部になりました。boost だけでなくそこからも取得できます。

おすすめ記事