我可以将指针传递给超类,但是可以创建一个子类的副本吗?

Ale*_*lex 3 c++ polymorphism copy-constructor

我有一个函数,它获取指向超类的指针并对其执行操作.但是,在某些时候,该函数必须对输入的对象进行深度复制.有什么方法可以执行这样的副本吗?

我想到让函数成为模板函数并让用户传递类型,但我希望C++提供更优雅的解决方案.

Mat*_* M. 12

SpaceCowboy提出了惯用法clone,但忽略了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); }
};
Run Code Online (Sandbox Code Playgroud)
  1. clone是一种const方法
  2. clone 返回指向当前类的指针,而不是基类
  3. clone 返回当前对象的副本

第二个是非常重要的,因为它允许使用有益于有时你有更多的类型信息而不仅仅是一个Super*.

此外,我通常更喜欢clone提供副本,而不仅仅是提供相同类型的新对象.否则你正在使用一个Exemplar模式来构建新对象,但你没有正确克隆,这个名称具有误导性.