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
    模式来构建新对象,但您没有正确克隆对象,而且名称具有误导性