【发布时间】:2015-06-01 01:29:05
【问题描述】:
我有
1- class A {int m;};
2- class B: public A
{float n;};
3- class C: public A
{string n;};
我将A类的所有实例都存储在
vector <class A*> myInstansesofA;
它被存储为一个指针,因为我根据一些 if 语句动态创建它们
if (some condition)
{
A* newA = new B();
myInstancesofA.push_back(newA );
}
else
{
A* newA = new C();
myInstancesofA.push_back(newA );
}
现在我需要创建矢量的精确副本。使用新的指针集,但数据的精确副本。
问题在于将 A 的每个实例(实际上是 B 和 C)的数据复制到新向量。
我尝试了以下方法,但它不起作用。
for (vector<A*>::const_iterator it = myInstancesofA.begin(); it != myInstancesofA.end(); ++it)
{
A* newA = new A(*(*it));
myInstancesofA.push_back(newA );
}
我怀疑发生此错误是因为“new A”仅调用类型 A 的复制构造函数,而不调用 B 或 C(我调试并发现这种情况正在发生)。
我该如何解决这个问题?
【问题讨论】:
标签: c++ pointers inheritance copy-constructor dynamic-allocation