Я хотел бы иметь вектор 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
. Я хочу свой торт и хочу его съесть!
vector
, как это сделал я, вполне нормально. Однако по какой-то причине кажется, что при добавлении частиunique_ptr
возникают незаконные копии. - person Bret Kuhns   schedule 24.01.2012unique_ptr
наshared_ptr
, когда понял, что использую неправильную семантику владения. - person Bret Kuhns   schedule 24.01.2012