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

Copy constructor for a class with unique_ptr to an abstract class as a member

我有一个 class (C) 和 vectorunique_ptr 到摘要 class (A) 作为成员。这是因为 C 必须与类型 A 的所有 classes 一起工作,即它的 children。

问题是我不知道如何为 C 编写复制构造函数,因为指针指向的 objects 的类型在编译时是未知的。在我看来这实际上是不可能的。任何人都可以确认这是不可能的吗?你对如何解决这个问题有什么建议吗?没有复制构造函数的 class 是不是太糟糕了?

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

当然,您可以实现对 T 进行深度复制的复制构造函数,但这取决于 T 实际上是什么。

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

创建副本