C ++复制派生类实例的最佳方法是什么

时间:2014-07-28 15:07:38

标签: c++ class copy copy-constructor derived

我想知道是否有"默认"获取派生类对象副本的方法。

我的班级结构如下:

 |------> A <------|
 |        ^        |
 |        |        |
B1        B2       B3

因此,A是一个抽象基类,它有一个私有的B *成员child_。 现在,我想在A中定义以下方法:

void set_child(const A& new_child) {
     if (child_ != nullptr)
         delete child_;
     // Now I want a to create a copy of new_child
     // (of the most specific derived class),
     // without explicitly dispatching on its type.

     child_ = ???

     // I think, child_ = new A(child); does not work
}

最常规的做法是什么? 我考虑过在每个派生类中定义一个虚拟clone()方法,以便我可以编写

child_ = new_child.clone();

然后我必须触及每个派生类。

我很高兴你的建议。

谢谢你, 斯文

1 个答案:

答案 0 :(得分:0)

这里涉及两个问题:
1.基类不知道子类的大小 2.子类是可变的(在内容中),您不想复制不同的类型。

最流行的解决方案是“克隆”解决方案,其中子类返回指向动态分配的自身副本的指针。

顺便说一下,在删除旧孩子之前,你需要制作克隆。

在网络上搜索“C ++克隆设计模式”。

提醒:还要检查您是否需要智能指针,如果需要,请查看哪一个。