292 votes

Pourquoi je peux pas push_back un unique_ptr dans un vecteur ?

Quel est le problème avec ce programme ?

L’erreur :

429voto

James McNellis Points 193607

Vous avez besoin de déplacer l' unique_ptr:

vec.push_back(std::move(ptr2x));

unique_ptr garantit qu'une seule unique_ptr container est la propriété de la tenue de pointeur. Cela signifie que vous ne pouvez pas faire des copies d'une unique_ptr (car alors, les deux unique_ptrs aurait la propriété), de sorte que vous ne pouvez la déplacer.

Notez, cependant, que c'est une utilisation incorrecte de l' unique_ptr. Vous ne pouvez pas l'utiliser pour gérer un pointeur vers une variable locale. La durée de vie d'une variable locale est gérée automatiquement: les variables locales sont détruits lorsque le bloc se termine (par exemple, lorsque la fonction renvoie, dans ce cas). Vous avez besoin d'allouer dynamiquement de l'objet:

std::unique_ptr<int> ptr(new int(1));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X