循環参照とSharedポインタ
メニューを表示するにはスワイプしてください
std::shared_ptr を使用する際、循環参照 と呼ばれる問題が発生する場合があります。循環参照 とは、2つのオブジェクトが互いに shared_ptr 参照を保持している状態です。shared_ptr は 参照カウント を利用しているため、カウントがゼロにならず、メモリリーク の原因となります。
main.cpp
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; }
この問題を解決する方法として、別の種類の スマートポインタ を使用する必要があります。
すべて明確でしたか?
フィードバックありがとうございます!
セクション 1. 章 9
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 1. 章 9