次の実装中にこのエラーが発生します。
クラスA; クラスB;
クラスA {
B b_obj; //ここでエラーが発生します
...
}
クラス B {
...
A a_object;
...
}
私が観察したことの1つは、クラスBを上にシフトすると削除されることですが、BにクラスAのオブジェクトもある双方向リンクを使用しているため、両方のエラーを取り除くことができません。
循環依存
struct A { B b; };
struct B { A a; };
決してコンパイルされません。A が B のサイズを認識していないか、またはその逆です (一方が他方より前に宣言されています)。
これで、(前方宣言を使用して) 書きたくなるかもしれません。
struct A { std::shared_ptr<B> b; };
struct B { std::shared_ptr<A> a; };
これはコンパイルされ、メモリリークが発生する可能性があります (a は b を参照し、その逆も同様です)。
したがって、問題は、A が B を所有しているか、B が A を所有しているか、または別のクラス C が両方を所有しているかどうかです。
(所有権が定義されている場合は、shared_ptr の代わりに new/delete を使用できます)