Bre*_*hns 9 c++ vector visual-studio-2010 unique-ptr
我想有一个unique_ptr的向量作为我正在制作的类的成员.
class Foo {
[...]
private:
vector<unique_ptr<Bar>> barList;
}
Run Code Online (Sandbox Code Playgroud)
但后来我开始从VS2010编译器获取神秘的错误消息:
error C2248: 'std::unique_ptr<_Ty>::operator =' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
Run Code Online (Sandbox Code Playgroud)
除了下面的一些错误行,这些错误行将深入到微软的实施std::_Copy_impl<>......
我将成员声明更改为
vector<unique_ptr<Bar>>* barList;
Run Code Online (Sandbox Code Playgroud)
它编译.但我不禁想知道为什么我不能按照我原来想要的方式去做?为了笑容,我尝试了这个,它工作正常:
vector<Bar> barList;
Run Code Online (Sandbox Code Playgroud)
但现在我失去了方便unique_ptr.我想要我的蛋糕,我也想吃它!
Man*_*rse 12
这里的问题是,在某处,您的代码试图调用"复制赋值"运算符Foo.
这会导致编译器尝试生成一个复制赋值运算符,该运算符调用所有子对象的复制赋值运算符Foo.最终,这导致尝试复制一个unique_ptr不可能的操作.
unique_ptr没有复制语义,因此您不能使用任何复制包含对象的方法.您可以通过std::move在试图复制的地方使用rvalue引用来执行此操作.没有看到你的代码,我不能说那将是什么.
如果它以第二种形式编译,要么你没有运用相同的代码,要么存在编译器错误.两者都应该以同样的方式失败.
您的第三个示例,按值存储是最简单的方法,除非您的对象很大并且价值昂贵,可以按值存储/复制.