我有一个类(C
),vector
unique_ptr
为A
个抽象类(C
)作为成员。这是因为A
必须适用于C
类型的所有类,即其子类。
问题在于我无法弄清楚如何为auto
编写复制构造函数,因为指针所指向的对象的类型在编译时是未知的。这对我来说实际上是不可能的。任何人都可以确认这是不可能的吗?您对如何解决问题有什么建议吗?没有复制构造函数的类是否太可怕了?
答案 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
实际上是什么。