1. ホーム
  2. c++

[解決済み] enable_shared_from_this` の有用性を教えてください。

2022-03-25 18:53:39

質問

私は enable_shared_from_this Boost.Asioのサンプルを読んでいるとき、ドキュメントを読んだ後、私はまだこれが正しく使用されるべきかどうか迷っています。 どなたか、このクラスを使用する意味がある場合の例と説明をお願いします。

どのように解決するのですか?

を有効にすることができます。 shared_ptr インスタンスから this である場合、そのようなことはありません。 this . これがなければ、あなたは shared_ptr から this ただし、すでにメンバーとして持っている場合は除きます。この例では enable_shared_from_this のブーストドキュメント :

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);
    }
}

これが返した共有ポインタは、"proper"とは異なる参照カウントを持ち、オブジェクトが削除されたときにどちらかが負けてぶら下がった参照を持つことになります。

enable_shared_from_this は、C++ 11 標準の一部となりました。boostと同様にそこから入手することも可能です。