Chciałbym mieć wektor unique_ptr jako członka klasy, którą tworzę.Jak zadeklarować wektor unique_ptr jako członka danych klasy?
class Foo {
[...]
private:
vector<unique_ptr<Bar>> barList;
}
Ale potem zaczynają się tajemnicze komunikaty o błędach z VS2010 kompilatora:
error C2248: 'std::unique_ptr<_Ty>::operator =' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
Wraz z kilkoma liniami błąd poniżej tego, co nurkować w realizacji Microsoftu std::_Copy_impl<>
...
Zmieniłem deklarację członka na
vector<unique_ptr<Bar>>* barList;
I to kompiluje. Ale nie mogę przestać się zastanawiać, dlaczego nie mogę tego zrobić tak, jak pierwotnie chciałem? Dla uśmiechami, próbowałem to i to działa dobrze:
vector<Bar> barList;
Ale teraz tracę wygodę unique_ptr
. Chcę moje ciasto i ja też chcę je zjeść!
Patrzyłem na http://stackoverflow.com/questions/8553464/vector-as-a-class-member i odpowiedź wydaje się myśleć, że deklarowanie "wektora", tak jak ja, jest po prostu w porządku. Z jakiegoś powodu wydaje się powodować nielegalne kopie podczas dodawania części 'unique_ptr'. –
Jak wygląda twój konstruktor kopiowania i operator przypisania? –
Prywatne zadanie, ale konstruktor kopii był winowajcą. Przełączono z 'unique_ptr' na' shared_ptr', gdy zdałem sobie sprawę, że używam niewłaściwego semantycznego własności. –