【发布时间】:2016-07-25 05:04:36
【问题描述】:
这里是 C++ 程序员新手。假设我有一个带有嵌套类 Inner 的类 Outer。 Inner 包含一个指针成员,在构造期间设置,指向 Outer。 Outer 包含一个函数 AddNewInner(),它创建一个指向自身的新 Inner 并将其添加到向量中。
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() 将 Inner 添加到向量时,这可以正常工作。但是,当我尝试创建 Outer 实例的副本时遇到了一个问题:Inner 的 Outer 副本的向量不指向副本(本身),它们仍然指向原始的 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 向量指向副本,而不是原始。完成此操作的最佳方法是什么,或者是否有其他方法可以做同样的事情?
【问题讨论】:
-
啊....您需要阅读复制构造函数。谷歌拷贝构造函数,深拷贝,浅拷贝。有很多参考资料。
标签: c++ pointers copy inner-classes outer-classes