std::shared_ptr を使用して "this" の参照を渡す方法
オブジェクト指向プログラミングでは、オブジェクトお互いの関係を維持するため。これには、多くの場合、相互の参照を保持するオブジェクトが含まれ、通信とデータ共有が可能になります。 C でオブジェクト参照を管理する 1 つの方法は、スマート ポインター、特に std::shared_ptr を使用することです。
クラス A がクラス B のオブジェクトへの std::shared_ptr 参照のリストを保持するという仮想シナリオを考えてみましょう。ここで、各 B オブジェクトは、その親である A オブジェクトへの参照も保持する必要があります。これは課題を引き起こします: クラス A は、それ自体 (this) の std::shared_ptr をその子 B に安全に渡すにはどうすればよいでしょうか?
簡単なアプローチは、child->setParent(this); のようなものを試すことかもしれません。ですが、これは有効な std::shared_ptr ではないため、正しくありません。解決策は、std::enable_shared_from_this の使用にあります。
std::enable_shared_from_this の紹介
std::enable_shared_from_this は、オブジェクトが std を返すことを可能にする基本クラスです。 ::shared_ptr 自身への参照。 std::enable_shared_from_this を継承することにより、クラス A は .shared_from_this() を呼び出して独自のインスタンスへの共有ポインターを取得できるようになります。
std::enable_shared_from_this を使用した解決策
以下の変更されたコードでは、クラス A が std::enable_shared_from_this から継承するようになり、child->setParent() 呼び出しで .shared_from_this():
<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()); } private: // Note the use of std::weak_ptr here std::list<std::weak_ptr<B>> children; };</code>
が使用されるようになりました。コード:
このアプローチは、次のことを解決します。 「this」の std::shared_ptr を親 A オブジェクトからその子 B オブジェクトに渡す問題。 std::enable_shared_from_this を使用し、std::weak_ptr で循環依存関係を管理することにより、安全で効果的な参照共有メカニズムが実現します。
以上がC で「this」の `std::shared_ptr` を親オブジェクトからその子オブジェクトに安全に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。