c++ - 在将实例作为基础对象传递的函数中使用复制构造函数创建实例的拷贝

标签 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) “如上)。

当然,我可以使用动态转换并检查空指针等或使用 typeid,但一定有更简单的方法吗?

提前致谢。

最佳答案


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

关于c++ - 在将实例作为基础对象传递的函数中使用复制构造函数创建实例的拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11164565/

相关文章:

c++ - 当类定义末尾缺少大括号时,C++ 类头文件中没有错误消息吗?

c++ - c++中不规则的文件写入性能

c++ - 缺少用于 map 初始化的构造函数

c++ - 具有内存分配和释放的复制构造函数

c++ - 关于拷贝构造

c++ - 有一对 <string, string> 如何查找它是否属于 map<string, string> 中的某个对?

c++ - 为什么匿名 union 不能包含具有非平凡构造函数/析构函数的成员?

c++ - 为什么 std::is_function<T> 会导致编译错误?

c++ - 安全 bool 习语和显式运算符 bool 之间的不兼容性

c++ - 为什么调用复制构造函数而不是转换构造函数?