复制接口的{std :: unique_ptr

时间:2016-05-21 19:42:26

标签: c++ c++11 unique-ptr

我需要复制某个界面std::unique_ptr<Interface>的{​​{1}}。

This post总结它很好,但它在我的情况下不起作用,因为Interface没有可用的构造函数。

示例:

Interface

有没有办法将//Pointer to copy std::unique_ptr<Interface> ptr = std::make_unique<Interface>(); //error: incomplete type is not allowed std::unique_ptr<Interface> copy{ new Interface(*ptr.get().data) }; 深度复制到ptr

2 个答案:

答案 0 :(得分:3)

这是Interface课程的问题,而不是unique_ptr。无法基于取消引用Interface的返回值来构建您的Interface::data类。

据推测,Interface是可复制构造和非多态的。如果是,您只需复制构造它:make_unique<Interface>(*ptr)。如果它不是可复制构造的,那么你根本无法复制Interface。如果它是多态类型,那么你无法正确复制它,除非明确编码类型以允许这样的事情。

答案 1 :(得分:3)

添加

virtual std::unique_ptr<Interface> clone() const = 0;

Interface。使用以下命令在接口的最终实现类中实现它:

virtual std::unique_ptr<Interface> clone() const override final {
  return std::make_unique<Implementation>(*this);
}