最近問題、循環参照が発生しました。クラスAがクラスBのオブジェクトを定義し、クラスBはまた、オブジェクトのクラスAで定義されるその
間違った設定モード:直接の新しい方法、問題は無限ループを生じ
// ああ クラスB; クラスA { パブリック: A(); 〜A(); プライベート: B * B; }。 // A.cpp用 の#include " あ" の#include " Bhの" A :: A() { B = 新しいB(); } A ::〜A() { 削除B。 B = nullptr。 }
// Bhの クラスA; クラスB { パブリック: B(); 〜B(); プライベート: A * ; }。 // B.cpp用 の#include " Bhを" の#include " あ" B :: B() { = 新しいA(); } B ::〜B() { 削除します。 A = nullptr; }
本当に問題があることを確認するために、次のように書いて、話します。しかしトラブルは、あなたがそれを変更する方法がわからないということです。
ここでは、エレガントに、この問題を解決する方法を、と言います。
建設の正しい方法:登録した構成と同様の方法を使用します
// ああ 、クラスB、 クラスA { パブリック: A(); 〜A(); プライベート: B * B; }; // A.cppの 書式#include " AH " の#include " BH " A :: A() { B = 新しい新B、 B - >セットA(本); //はどこ方法レジスタクラスBの構成と同様、フォーカス、描画 } ::〜() { 削除Bを、 B = nullptr A。 }
// のBHの クラスA、 クラスB { パブリック: B(); // 描画キーは、達成するために必要とされていない 〜Bを(); 無効セットA(A * X); プライベート: A * A; }; // B.cpp #include " BH " の#include " AH " ボイド B ::セットA(A * X) { A = X; }