0

次の実装中にこのエラーが発生します。

クラスA; クラスB;

クラスA {
B b_obj; //ここでエラーが発生します
...
}

クラス B {
...
A a_object;
...
}

私が観察したことの1つは、クラスBを上にシフトすると削除されることですが、BにクラスAのオブジェクトもある双方向リンクを使用しているため、両方のエラーを取り除くことができません。

4

2 に答える 2

0

循環依存

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 を使用できます)

于 2013-10-08T18:11:53.537 に答える