ホームページ > バックエンド開発 > C++ > 「std::shared_ptr」を使用して「this」への参照を子オブジェクトと安全に共有するにはどうすればよいですか?

「std::shared_ptr」を使用して「this」への参照を子オブジェクトと安全に共有するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-29 11:46:30
オリジナル
400 人が閲覧しました

How Can I Safely Share a Reference to

「この」難題の std::shared_ptr

スマート ポインターの領域では、クラスのオブジェクトが親である A は、自身への参照をその子であるクラス B のオブジェクトと共有する必要があります。ただし、単純なポインターを「this」に渡すと、意味のないエラーが発生する可能性があります。

解決策は謎の中にあります。 std::enable_shared_from_this ツール。このクラスから継承すると、クラス内で .shared_from_this() にアクセスできるようになり、現在のオブジェクトの共有所有権が付与されます。

ただし、この相互接続からは、循環依存関係が発生する可能性があるという重要な注意事項が生じます。リソース リークの落とし穴を回避するには、そのような依存関係を作成するときに std::weak_ptr を導入することが賢明です。

この改訂されたアプローチを採用すると、改訂されたコードは次のようになります。

<code class="cpp">class A : public std::enable_shared_from_this<A>
{
public:
    void addChild(std::shared_ptr<B> child)
    {
        children.push_back(child);
        child->setParent(shared_from_this()); // Corrected reference passing
    }

private:
    std::list<std::weak_ptr<B>> children; // Using weak_ptr to prevent circular references
};

class B
{
public:
    void setParent(std::shared_ptr<A> parent)
    {
        this->parent = parent;
    }

private:
    std::shared_ptr<A> parent;
};</code>
ログイン後にコピー

.shared_from_this() を呼び出すには、呼び出し時に std::shared_ptr によるオブジェクトの所有権が必要であることに注意してください。これにより、オブジェクトがスタックに割り当てられる可能性が排除され、一般にコンストラクターまたはデストラクター内からの .shared_from_this() の呼び出しが制限されます。

以上が「std::shared_ptr」を使用して「this」への参照を子オブジェクトと安全に共有するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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