Comment déclarer un vecteur de unique_ptr est comme données de la classe de membre?

J'aimerais avoir un vecteur de unique_ptr est comme un membre d'une classe, je suis en train de faire.

class Foo {
    [...]

private:
    vector<unique_ptr<Bar>> barList;
}

Mais ensuite j'ai commencer à obtenir des messages d'erreur cryptique de la VS2010 compilateur:

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 en dessous de plonger dans l'implémentation de Microsoft std::_Copy_impl<>...

J'ai changé la déclaration d'un membre de

vector<unique_ptr<Bar>>* barList;

Et il compile. Mais je ne peux pas aider mais se demander pourquoi je ne peut pas le faire de la façon que je voulais? Pour sourire, je l'ai essayé 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 en manger trop!

J'étais en train de regarder stackoverflow.com/questions/8553464/vector-as-a-class-member et la réponse semble penser de la déclaration d'une vector comme je l'ai fait, c'est correct de le faire. Pour une raison quelconque, cependant, il semble déclencher des copies illégales lors de l'ajout de la unique_ptr partie.
Ce n'votre constructeur de copie et l'opérateur d'affectation?
Privé d'affectation, mais le constructeur de copie était le coupable. Commutation de unique_ptr à shared_ptr quand j'ai réalisé que j'ai été en utilisant le mauvais propriété sémantique.

OriginalL'auteur Bret Kuhns | 2012-01-24