Je voudrais avoir un vecteur de unique_ptr en tant que membre d'une classe que je fais.Comment déclarer un vecteur de unique_ptr en tant que membre de données de classe?
class Foo {
[...]
private:
vector<unique_ptr<Bar>> barList;
}
Mais je commence à recevoir des messages d'erreur énigmatiques du compilateur VS2010:
error C2248: 'std::unique_ptr<_Ty>::operator =' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
Avec une poignée de lignes d'erreur ci-dessous ce qui plongent dans la mise en œuvre de Microsoft std::_Copy_impl<>
...
J'ai changé la déclaration de membre en
vector<unique_ptr<Bar>>* barList;
Et il compile. Mais je ne peux pas m'empêcher de me demander pourquoi je ne peux pas le faire comme je le voulais initialement? Pour des grimaces, j'ai essayé cela et il fonctionne très bien:
vector<Bar> barList;
Mais maintenant, je perds la commodité de unique_ptr
. Je veux mon gâteau et je veux le manger aussi!
Je regardais http://stackoverflow.com/questions/8553464/vector-as-a-class-member et la réponse semble penser que déclarer un 'vecteur' comme je l'ai fait est très bien à faire. Pour une raison quelconque, cependant, il semble déclencher des copies illégales lors de l'ajout de la partie 'unique_ptr'. –
À quoi ressemblent votre constructeur de copie et votre opérateur d'affectation? –
Affectation privée, mais le constructeur de copie était le coupable. J'ai passé de 'unique_ptr' à' shared_ptr' quand j'ai réalisé que j'utilisais la mauvaise sémantique de propriété. –