如何将 unique_ptr 的向量声明为类数据成员?

新手上路,请多包涵

我想要一个 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 许可协议

阅读 595
1 个回答

这里的问题是,您的代码在某处试图调用 Foo 的“复制分配”运算符。

这会导致编译器尝试生成一个复制赋值运算符,该运算符调用 Foo 的所有子对象的复制赋值运算符。最终,这导致尝试复制 unique_ptr ,这是不可能的操作。

原文由 Mankarse 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题