初心者の C++ プログラマーです。ネストされたクラス Inner を持つクラス Outer があるとします。Inner には、構築中に設定された Outer へのポインター メンバーが含まれています。Outer には、それ自体を指す新しい Inner を作成し、それをベクトルに追加する関数 AddNewInner() が含まれています。
class Outer {
public:
class Inner {
public:
Inner(Outer* outerParent) : mOuterParent(outerParent) {}
Outer* mOuterParent;
}
void AddNewInner() {
Inner newInner(this);
mInnersVec.push_back(newInner);
}
vector<Inner> mInnersVec;
}
Outer の新しいインスタンスを作成し、AddNewInner() を呼び出して Inners をベクターに追加する場合、これは正常に機能します。ただし、Outer のインスタンスのコピーを作成しようとすると、問題が発生しました。Outer コピーの Inner のベクトルは、コピー (それ自体) を指さず、元の Outer を指しています。
Outer outerA;
outerA.AddNewInner();
Outer* ptrA = outerA.mInnersVec[0].mOuterParent; // this points to outerA, good!
Outer outerB = outerA;
Outer* ptrB = outerB.mInnersVec[0].mOuterParent; // this still points to outerA, bad!
オリジナルではなくコピーを指すには、コピー内のインナーのベクトルが必要です。これを達成するための最良の方法は何ですか、またはおそらく同じことを行う別の方法はありますか?