复制接口的 std::unique_ptr
Copying a std::unique_ptr of an interface
我需要复制一些接口Interface
的std::unique_ptr<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
深度复制到copy
?
这是
您的Interface
类的问题,而不是unique_ptr
。不能基于取消引用 Interface::data
的返回值来构造Interface
类。
据推测,Interface
是可复制构造和非多态的。如果是,您只需复制构造它:make_unique<Interface>(*ptr)
.如果它不是可复制的,那么你根本无法复制Interface
。如果它是多态类型,则无法正确复制它,除非该类型被显式编码为允许此类操作。
添加
virtual std::unique_ptr<Interface> clone() const = 0;
要Interface
. 在接口实现的最后一个类中实现它:
virtual std::unique_ptr<Interface> clone() const override final {
return std::make_unique<Implementation>(*this);
}
相关文章:
- 为什么 std::unique 不调用 std::sort?
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 生成"unique"矩阵
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- 我对 std::unique(算法)C++有问题
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- std::shared_ptr::unique(),复制和线程安全
- 如何在C++03中用自定义谓词调用std::unique
- C++中的指针否定 (!ptr == NULL)
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误