「this」の std::shared_ptr: 循環依存関係を理解する
std::enable_shared_from_this からの継承が「std」を解決する鍵です::shared_ptr のこの難問。これを有効にすると、.shared_from_this() を呼び出して、現在のオブジェクトへの共有ポインタを取得できます。ただし、これにより、親オブジェクトと子オブジェクトの間に潜在的な循環依存関係が生じます。
この問題に対処するには、子の親への参照に std::weak_ptr を使用することをお勧めします。これにより、強力な循環参照の形成が防止され、リソースのリークが防止されます。変更されたコードは、このアプローチを実装する方法を示しています。
<br>class A : public std::enable_shared_from_this<a> {<br>public:</a></p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">void addChild(std::shared_ptr<B> child) { children.push_back(child); child->setParent(shared_from_this()); }
private :
std::list<std::weak_ptr<B>> children;
};
クラス B {
パブリック:
void setParent(std::shared_ptr<A> parent) { this->parent = parent; }
プライベート:
std::shared_ptr<A> parent;
};
.shared_from_this() を呼び出すには、呼び出し時に現在のオブジェクトが std::shared_ptr によって管理されている必要があることに注意することが重要です。これは、そのようなオブジェクトをスタック上に作成することが不可能になり、コンストラクターまたはデストラクターから .shared_from_this() を呼び出すことは一般に推奨されないことを意味します。
以上が「this」の std::shared_ptr を使用するときに循環依存関係を防ぐ方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。