Я хотел бы иметь вектор 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
. Я хочу мой торт, и я тоже хочу его съесть!
Я смотрел на http://stackoverflow.com/questions/8553464/vector-as-a-class-member, и кажется, что ответ кажется, что объявление «вектора», как я, было просто замечательно. По какой-то причине, по-видимому, он вызывает незаконные копии при добавлении части 'unique_ptr'. –
Как выглядит ваш конструктор копий и оператор присваивания? –
Частное назначение, но копия была виновником. Перешел из 'unique_ptr' в' shared_ptr', когда понял, что использовал неправильную семантику собственности. –