![](/img/trans.png)
[英]Factory Method pattern with unique_ptr member of a abstract class and Copy constructor
[英]Copy constructor for a class with unique_ptr to an abstract class as a member
我有一个类( C
),带有一个unique_ptr
的vector
作为一个抽象类( A
)作为成员。 这是因为C
必须适用于所有类型A
类,即它的子类。
问题是我无法弄清楚如何为C
编写复制构造函数,因为指针所指向的对象的类型在编译时是未知的。 这对我来说实际上是不可能的。 任何人都可以确认这是不可能的吗? 您对如何解决问题有什么建议吗? 没有复制构造函数的类是否太可怕了?
您没有说明您是否控制了抽象类的代码以及从中派生的类。 如果这样做,那么最简单的方法是在抽象类中提供纯虚方法Clone
并在派生类中实现它。 此方法应处理创建正确的副本。 不幸的是,因为unique_ptr是不可复制的,所以你需要遍历你的vector并通过调用Clone
创建副本。
那么,既然std::unique_ptr<T>
是不可拷贝,因此std::vector<std::unique_ptr<T>>
是不可拷贝,因此C
已std::vector<std::unique_ptr<T>>
作为成员不应该是默认可复制的。
你可以,当然,实现拷贝构造函数,使得深拷贝T
,但要看是什么T
实际上是。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.