초보자 C++ 프로그래머가 있습니다. 내부 클래스 인 중첩 된 클래스가있는 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 복사본의 Vector는 복사본 자체를 가리 키지 않고 원래 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의 벡터가 필요합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 아니면 동일한 작업을 수행 할 대체 방법이 있습니까?
아 ....복사 생성자를 읽어야합니다. Google 사본 생성자, 딥 복사, 얕은 사본. 많은 참고 자료가 있습니다. – cplusplusrat