【发布时间】:2011-07-06 03:26:48
【问题描述】:
我有基类Base 派生自Derived1、Derived2 和Derived3。
我已经为我存储为Base* a 的派生类之一构建了一个实例。我现在需要制作对象的深层副本,并将其存储为Base* b。
据我所知,复制类的正常方法是使用复制构造函数并重载operator=。但是,由于我不知道a 的类型是Derived1、Derived2 还是Derived3,所以我想不出使用复制构造函数或operator= 的方法。我能想到干净地完成这项工作的唯一方法是实现类似的东西:
class Base
{
public:
virtual Base* Clone() = 0;
};
并在派生类中实现Clone,如下所示:
class Derivedn : public Base
{
public:
Base* Clone()
{
Derived1* ret = new Derived1;
copy all the data members
}
};
Java 倾向于使用 Clone 相当多,是否有更多的 C++ 方式来执行此操作?
【问题讨论】:
-
执行此操作的最佳方式可能取决于大局,您尝试执行此操作的原因以及在何种情况下...
-
我有一个由不同对象组成的复杂树,有些是多态的。我想使用递归算法复制树。
-
希望对您有所帮助:stackoverflow.com/questions/3831370/…。按照“这个、这个和这个”中提到的句子中的链接进行操作
-
可克隆模式有一些您需要注意的重要属性。这篇文章值得一读:herbsutter.com/2019/10/03/…