Новичок C++ программист здесь. Предположим, у меня есть класс Outer с вложенным классом Inner. Внутренний содержит указательный элемент, заданный во время построения, для Outer. Outer содержит функцию 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(), чтобы добавить колбы к вектору. Тем не менее, я столкнулся с проблемой при попытке создать копию экземпляра Outer: вектор внешней копии Inners не указывает на копию (сам), они все равно указывают на исходный 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!
Мне нужен вектор Inners в копии, чтобы указать на копию, а не на оригинал. Каков наилучший способ сделать это, или, возможно, есть альтернативный способ сделать то же самое?
Aah ....Вам нужно прочитать конструкторы копирования. Google копировать конструкторы, глубокие копии, мелкой копии. Много ссылок. – cplusplusrat