使用函数内的复制构造函数创建实例的副本,该函数将实例作为基础对象传递

时间:2012-06-22 21:46:17

标签: c++ c++11 copy-constructor

class A {...}  
class B : public A {...}  
class C : public A {...}  
void M(A* a) {
  A* aa = new B(* a)
  ...
}  
int main()  
{  
  B b = new B();  
  M(b);  
  ...
}  

所以我想做的是调用传递给M的对象(“a”)的复制构造函数,而不必知道它是B类还是C类等(而不是“new B(a)” “ 如上)。

当然,我可以使用动态强制转换并检查null ptr等或使用typeid,但必须有更简单的方法吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)


获得相同效果的一种方法是使用clone()模式。为A类提供一个复制它的虚函数,覆盖每个子类中的该函数。通过引用将A的实例传递给您的函数,然后在该函数中clone。有点乱,但有效。