ホームページ > バックエンド開発 > C++ > 「enable_shared_from_this」とは何ですか?また、「shared_ptr」インスタンスを安全に作成するにはどうすればよいですか?

「enable_shared_from_this」とは何ですか?また、「shared_ptr」インスタンスを安全に作成するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-17 04:36:25
オリジナル
456 人が閲覧しました

What is `enable_shared_from_this` and how does it safely create `shared_ptr` instances?

enable_shared_from_this とは何ですか?また、なぜ便利ですか?

概要

Boost を探索しているとき。 Asio の例では、enable_shared_from_this が表示され、困惑する場合があります。その適切な適用について。この記事は、このクラスの使用が適切な場合の包括的な説明と例を提供することを目的としています。

enable_shared_from_this について

enable_shared_from_this は、通常のクラスの変換を容易にするユーティリティ クラスです。有効なshared_ptrインスタンスへのポインタ(このような)。これがないと、shared_ptr がメンバー変数として明示的に格納されない限り、現在のオブジェクトへのshared_ptr へのアクセスは不可能になります。

例と説明

次の例を考えてみましょう。

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 のメンバー インスタンス。この変換は、enable_shared_from_this クラスによって許可されます。次のアプローチは正しくないことに注意することが重要です:

class Y : public enable_shared_from_this<Y>
{
public:

    shared_ptr<Y> f()
    {
        return shared_ptr<Y>(this);
    }
};
ログイン後にコピー

これにより、異なる参照カウントを持つ共有ポインターが生成され、オブジェクトが削除されたときに潜在的なダングリング参照が発生する可能性があります。

結論

enable_shared_from_this は、shared_ptr インスタンスを作成するための貴重なツールです。現在のオブジェクト、通常のポインターのみにアクセスできる場合。これにより、ダングリング参照が防止され、適切なリソース管理が保証されます。この機能は、C 11 標準の一部としても利用できるようになりました。

以上が「enable_shared_from_this」とは何ですか?また、「shared_ptr」インスタンスを安全に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート