我想知道是否有"默认"获取派生类对象副本的方法。
我的班级结构如下:
|------> 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();
然后我必须触及每个派生类。
我很高兴你的建议。
谢谢你, 斯文
答案 0 :(得分:0)
这里涉及两个问题:
1.基类不知道子类的大小
2.子类是可变的(在内容中),您不想复制不同的类型。
最流行的解决方案是“克隆”解决方案,其中子类返回指向动态分配的自身副本的指针。
顺便说一下,在删除旧孩子之前,你需要制作克隆。
在网络上搜索“C ++克隆设计模式”。
提醒:还要检查您是否需要智能指针,如果需要,请查看哪一个。