次のコードを検討してください。
using boost::shared_ptr;
struct B;
struct A{
~A() { std::cout << "~A" << std::endl; }
shared_ptr<B> b;
};
struct B {
~B() { std::cout << "~B" << std::endl; }
shared_ptr<A> a;
};
int main() {
shared_ptr<A> a (new A);
shared_ptr<B> b (new B);
a->b = b;
b->a = a;
return 0;
}
出力はありません。デストラクタは呼び出されません。メモリーリーク。私は常に、スマート ポインターがメモリ リークの回避に役立つと信じてきました。
クラス内で相互参照が必要な場合はどうすればよいですか?