Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 循環参照とSharedポインタ | スマートポインタの導入
C++スマートポインタ

book循環参照とSharedポインタ

メニューを表示するにはスワイプしてください

std::shared_ptr を使用する際、循環参照 と呼ばれる問題が発生する場合があります。循環参照 とは、2つのオブジェクトが互いに shared_ptr 参照を保持している状態です。shared_ptr参照カウント を利用しているため、カウントがゼロにならず、メモリリーク の原因となります。

main.cpp

main.cpp

copy
1234567891011121314151617181920212223242526
#include <iostream> #include <memory> class B; // Forward declaration class A { public: std::shared_ptr<B> p_b; ~A() { std::cout << "A destroyed\n"; } }; class B { public: ~B() { std::cout << "B destroyed\n"; } std::shared_ptr<A> p_a; }; int main() { std::shared_ptr<A> a = std::make_shared<A>(); std::shared_ptr<B> b = std::make_shared<B>(); a->p_b = b; b->p_a = a; }

この問題を解決する方法として、別の種類の スマートポインタ を使用する必要があります。

question mark

std::shared_ptrにおいて循環参照はどのような問題を引き起こしますか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  9

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  9
some-alt