「この」難題の 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 サイトの他の関連記事を参照してください。