C++ 我可以传递指向超类的指针,但创建子类的副本吗?
我有一个函数,它接受指向超类的指针并对其执行操作。但是,在某些时候,函数必须对输入的对象进行深度复制。我有没有办法做这样的复制C++ 我可以传递指向超类的指针,但创建子类的副本吗?,c++,polymorphism,copy-constructor,C++,Polymorphism,Copy Constructor,我有一个函数,它接受指向超类的指针并对其执行操作。但是,在某些时候,函数必须对输入的对象进行深度复制。我有没有办法做这样的复制 P>我想让函数成为模板函数,简单地让用户通过这个类型,但是我希望C++提供一个更优雅的解决方案。p> 我在wxWidgets中看到的一个例子是定义一个覆盖的方法“clone”,以便在每个类中都可以创建适当的深度副本,但该方法将副本作为超类返回 (还有其他答案和例子)SpaceCowboy提出了惯用的克隆方法,但忽略了3个关键细节: class Super { publ
<> P>我想让函数成为模板函数,简单地让用户通过这个类型,但是我希望C++提供一个更优雅的解决方案。p> 我在wxWidgets中看到的一个例子是定义一个覆盖的方法“clone”,以便在每个类中都可以创建适当的深度副本,但该方法将副本作为超类返回
(还有其他答案和例子)SpaceCowboy提出了惯用的克隆方法,但忽略了3个关键细节:
class Super
{
public:
virtual Super* clone() const { return new Super(*this); }
};
class Child: public Super
{
public:
virtual Child* clone() const { return new Child(*this); }
};
clone
是一种const
方法clone
返回指向当前类而不是基类的指针clone
返回当前对象的副本Super*
另外,我通常更喜欢clone
来提供一个副本,而不仅仅是一个相同类型的新对象。否则,您将使用Exemplar
模式来构建新对象,但您没有正确克隆对象,而且名称具有误导性