Mi piacerebbe avere un vettore di unique_ptr come membro di una classe che sto facendo.Come dichiarare un vettore di unique_ptr come membro dati di classe?
class Foo {
[...]
private:
vector<unique_ptr<Bar>> barList;
}
Ma poi ho iniziare a ricevere i messaggi di errore criptici dal VS2010 compilatore:
error C2248: 'std::unique_ptr<_Ty>::operator =' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
Insieme a una manciata di righe di errore sotto di quella che tuffarsi implementazione Microsoft di std::_Copy_impl<>
...
Ho modificato la dichiarazione membro in
vector<unique_ptr<Bar>>* barList;
E compila. Ma non posso fare a meno di chiedermi perché non posso farlo nel modo in cui inizialmente lo volevo? Per sorrisi, ho provato questo e funziona benissimo:
vector<Bar> barList;
Ma ora perdo la comodità di unique_ptr
. Voglio la mia torta e voglio mangiarla anch'io!
stavo guardando http://stackoverflow.com/questions/8553464/vector-as-a-class-member e la risposta sembra pensare dichiarare un 'VECTOR' come ho fatto io è bene fare. Per qualche ragione, però, sembra attivare copie illegali quando si aggiunge la parte 'unique_ptr'. –
Cosa fare il vostro costruttore di copia e l'assegnazione operatore assomigliare? –
incarico privato, ma costruttore di copia era il colpevole. Passato da 'unique_ptr' a' shared_ptr' quando ho capito che stavo usando la proprietà semantica sbagliata. –