所以我有以下类:
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
定义一个复制构造函数。
这不是一个深拷贝,它充其量是一个浅拷贝,你把指针从智能指针中取出,然后把它放在第二个。
这将失败。您需要先克隆对象。