【发布时间】:2012-01-24 14:15:21
【问题描述】:
我想要一个 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 的便利。我想要我的蛋糕,我也想吃!
【问题讨论】:
-
我在看stackoverflow.com/questions/8553464/vector-as-a-class-member,答案似乎认为像我一样声明
vector就可以了。但是,由于某种原因,添加unique_ptr部分时似乎会触发非法复制。 -
你的拷贝构造函数和赋值运算符是什么样的?
-
私有赋值,但复制构造函数是罪魁祸首。当我意识到我使用了错误的所有权语义时,从
unique_ptr切换到shared_ptr。
标签: c++ visual-studio-2010 vector unique-ptr