ホームページ > バックエンド開発 > C++ > 「enable_shared_from_this」は C のシェアード ポインタ所有権の問題をどのように解決しますか?

「enable_shared_from_this」は C のシェアード ポインタ所有権の問題をどのように解決しますか?

Patricia Arquette
リリース: 2024-12-15 04:52:34
オリジナル
683 人が閲覧しました

How Does `enable_shared_from_this` Solve Shared Pointer Ownership Issues in C  ?

enable_shared_from_this はオブジェクトの所有権の維持にどのように役立ちますか?

Boost.Asio の例を調べているときに、enable_shared_from_this に遭遇したことがあるかもしれません。ドキュメントを参照したにもかかわらず、その使用法は依然として不明瞭です。ここでは、その目的を明確にするための包括的な説明と例を示します。

enable_shared_from_this を使用すると、オブジェクト自体 (this で表される) にのみアクセスできる場合に、オブジェクトの有効なshared_ptr インスタンスを作成できます。これがなければ、既にメンバーとして定義されていない限り、この Shared_ptr を取得することは不可能です。

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

class Y: public enable_shared_from_this<Y>
{
public:

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

ここで、メソッド f() は有効な値を返すことができます。メンバーインスタンスがない場合でも、shared_ptr。次のアプローチは失敗することに注意してください:

class Y: public enable_shared_from_this<Y>
{
public:

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

結果は、参照カウントが異なる 2 つのshared_ptr になります。オブジェクトが削除されると、そのうちの 1 つがダングリング参照になります。

enable_shared_from_this が C 11 標準の一部となり、そこからだけでなく Boost からもアクセスできるようになったことに注意することが重要です。

以上が「enable_shared_from_this」は C のシェアード ポインタ所有権の問題をどのように解決しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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