私はセーフC ++を読んでおり、著者は以下のように循環参照について言及しています。
相互へのポインターを含む 2 つのオブジェクトを考えてみましょう
class A;
class B { public: A* a; };
class A { public: B* b; };
この状況は「循環参照」として知られています。A と B へのポインタは存在しますが、別の場所からこれらのオブジェクトの少なくとも 1 つへの他のポインタがない場合、いずれかの変数のメモリを再利用する方法がないため、メモリ リークが発生します。これらの 2 つのオブジェクトは、その後も幸せに暮らし、破壊されることはありません。
私の質問
- なぜメモリリークが発生するのですか? 対応するクラスのデストラクタでメモリを削除するのはなぜ悪い考えですか?
- 2つの物体が永遠に生き続けると著者が述べた根拠は何ですか?
お時間をいただきありがとうございます。