将具有unique_ptr的类的构造函数复制到作为成员的抽象类

时间:2015-06-03 22:22:20

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

我有一个类(C),vector unique_ptrA个抽象类(C)作为成员。这是因为A必须适用于C类型的所有类,即其子类。

问题在于我无法弄清楚如何为auto编写复制构造函数,因为指针所指向的对象的类型在编译时是未知的。这对我来说实际上是不可能的。任何人都可以确认这是不可能的吗?您对如何解决问题有什么建议吗?没有复制构造函数的类是否太可怕了?

2 个答案:

答案 0 :(得分:2)

您没有说明您是否控制了抽象类的代码以及从中派生的类。如果这样做,那么最简单的方法是在抽象类中提供纯虚方法Clone并在派生类中实现它。此方法应处理创建正确的副本。不幸的是,因为unique_ptr不可复制,所以你需要遍历你的vector并通过调用Clone来创建副本。

答案 1 :(得分:1)

好吧,由于std::unique_ptr<T>不可复制,因此std::vector<std::unique_ptr<T>>不可复制,因此C作为成员的std::vector<std::unique_ptr<T>>不应该是默认可复制的。

当然,您可以实现制作T的深层副本的复制构造函数,但这取决于T实际上是什么。