c++ - 返回你自己内部拷贝的正确方法是什么?

标签 c++ c++11

Node*Clone(){
    numClones++;    
    Node*cloned=new Node(*this);
    return cloned;
}

我有一个默认构造函数(不带参数)并且我没有声明复制构造函数,所以我希望它简单地复制 *this 内存的全部内容并返回一个指针

但是,我在上面的 new 行遇到错误:

调用隐式删除的复制构造函数

两个可能的问题,但我认为它们不会影响此:

  • this 附加了一个 unique_ptr。即它包含一个 unique_ptr 的容器,并且它本身存储在另一个 unique_ptr 的容器中。但我并没有移动那个指针,我正在创建未附加到先前对象的 new 对象,对吧?
  • this 实际上是 Node 的子类,但我想返回一个指向基类的指针

最佳答案

正如 Jeffrey 所说,std::unique_ptr 不能被复制构造。

此外,您的Clone 方法在逻辑上也不正确。因为您在那里实例化了一个 Node 对象 - 一个基类。所以它实际上不会是一个拷贝

作为一种解决方案,您可以在基类中声明一个Clone 方法并在纯虚拟中创建:

class Node
{
    virtual Node * Clone() const = 0;
}

并让你的子类实现它

PS:不要忘记界面中的 virtualprotected dtor

关于c++ - 返回你自己内部拷贝的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16612285/

相关文章:

c++ - 使用函数指针的代码无法编译

c++ - Bison 中的 $$ 是什么?

c++ - 为 sRGB 到 CIELAB 色彩空间转换生成 3DLUT(.3dl 文件)

c++ - 成员函数类型的偏特化

c++ - 有没有办法测试默认构造函数不存在?

c++ - godot的NetSocket是如何创建实例的?

c++ - 在 libclang 访问者中将成员函数作为参数传递

c++ - 宏使用 GCC 编译但不使用 VS11

c++ - 尽管传递了一个右值,为什么我的 move 构造函数没有被调用?

c++ - 将可变参数模板参数解包到数组中,为每种类型应用函数