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:不要忘记界面中的 virtual
或 protected
dtor
关于c++ - 返回你自己内部拷贝的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16612285/