「this」の std::shared_ptr を使用するときに循環依存関係を防ぐ方法は?

Linda Hamilton
リリース: 2024-10-29 04:43:29
オリジナル
523 人が閲覧しました

How to Prevent Circular Dependencies When Using std::shared_ptr of

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!