C++尝试深度复制唯一指针时出现内存访问冲突



所以我有以下类:

class foo{
public:
unique_ptr<someClass> pt;
Foo(){}
//Copy constructor
Foo(Foo& f){
someClass * copy = f.pt.get();
pt=unique_ptr<someClass>(copy);
}
};

所以上面的代码按预期工作,复制构造函数将使当前类具有给定类的精确副本。但是,它也给了我内存访问冲突。我尝试在 valgrind 上调试它,但它说它与 unique_ptr 类的默认删除有关。但是,在我的代码中,我不会调用 delete。

我想知道是否有办法删除这些内存访问违规,或者我是否缺少另一个步骤。

对于深度复制,您必须像这样修改复制构造函数:

Foo(Foo& f) : pt( new someClass( *f.pt.get() ) ) {}

如果尚未定义,您还必须为someClass定义一个复制构造函数。

这不是一个深拷贝,它充其量是一个浅拷贝,你把指针从智能指针中取出,然后把它放在第二个。

这将失败。您需要先克隆对象。

最新更新