【发布时间】:2012-01-07 17:05:45
【问题描述】:
我有A类和B类的组合关系,
class A
{
A(); //default constructor //EDIT
A(const A &mA); // copy constructor //EDIT
virtual ~A();
};
class B
{
B(A *pA); //constructor
B(const B &mB) //copy constructor
virtual ~B(); //EDIT: destructor to eliminate mA and to build the composition
A* mA;
};
我可以这样写复制构造函数吗:
B(const B &mB, A *pA)
我需要它来保持复制对象之间的组合。 这是错的吗?是否存在更好的解决方案? 谢谢
编辑:我会尝试更好地解释我。我想要对象 mB 和对象 mA 的副本。但是如果在复制构造函数中我写了 mA =mB.mA,我会将地址复制到原始对象 mA。所以我认为我需要一个深层副本而不是一个燕子副本。我的困惑出现了,因为现在,从主开始,我首先复制对象 mA,然后复制 mB。这样做,我想我需要为复制的对象 mA 分配一个外部函数,如
foo(A *pA)
否则,如果我可以做一个 mB 的深拷贝,我就可以解决问题。这叫深拷贝吗?
附: A 和 B 是抽象类
【问题讨论】:
-
你可以写那个函数,但它不是复制构造函数。
-
@BenjaminLindley:这应该是一个答案......
-
@OliCharlesworth:虽然我没有更好的解决方案(因为我不确定他要解决什么问题),但我认为这就是问题的核心。
-
是的,你想解决 Ale 什么问题?
-
@Ale:是的,这可以称为深度复制。问题是
A是一个抽象类,但是你需要复制一个实例的具体子类,但是由于你不知道调用哪个复制构造函数,你需要一个抽象的Clone()函数。稍后我会发布一个详细的答案。
标签: c++ copy-constructor