我想要一个 unique_ptr 的向量作为我正在制作的类的成员。
class Foo {
[...]
private:
vector<unique_ptr<Bar>> barList;
}
但随后我开始从 VS2010 编译器收到神秘的错误消息:
error C2248: 'std::unique_ptr<_Ty>::operator =' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
连同下面的一些错误行,这些错误行深入到 Microsoft 的 std::_Copy_impl<>
的实现中……
我将成员声明更改为
vector<unique_ptr<Bar>>* barList;
它编译。但是我不禁想知道为什么我不能按照我最初想要的方式去做呢?对于笑容,我尝试了这个,它工作正常:
vector<Bar> barList;
但是现在我失去了 unique_ptr
的便利性。我想要我的蛋糕,我也想吃!
原文由 Bret Kuhns 发布,翻译遵循 CC BY-SA 4.0 许可协议
这里的问题是,您的代码在某处试图调用
Foo
的“复制分配”运算符。这会导致编译器尝试生成一个复制赋值运算符,该运算符调用
Foo
的所有子对象的复制赋值运算符。最终,这导致尝试复制unique_ptr
,这是不可能的操作。