Maison > développement back-end > C++ > Comment puis-je pousser correctement un « std :: unique_ptr » dans un « std :: vector » ?

Comment puis-je pousser correctement un « std :: unique_ptr » dans un « std :: vector » ?

Linda Hamilton
Libérer: 2024-12-28 13:07:16
original
479 Les gens l'ont consulté

How Can I Correctly Push a `std::unique_ptr` into a `std::vector`?

Impossible de repousser Unique_Ptr dans un vecteur

Le code fourni tente de pousser un std::unique_ptr dans un vecteur, ce qui entraîne une erreur de compilation due à l'impossibilité d'effectuer une opération de copie sur le pointeur unique.

Rappelons que std::unique_ptr garantit la propriété exclusive du pointeur contenu vers un objet spécifique. Cela signifie que lors de l'attribution d'un pointeur unique, la propriété est déplacée et non copiée. Par conséquent, faire des copies d'un pointeur unique est interdit car plusieurs propriétaires violeraient sa garantie de propriété unique.

Pour résoudre le problème et insérer correctement le pointeur unique dans le vecteur, utilisez la fonction std::move comme suit :

vec.push_back(std::move(ptr2x));
Copier après la connexion

std::move transfère la propriété du pointeur unique au vecteur, permettant son insertion dans le vecteur sans violer la propriété unique règle.

Il est crucial de noter que l'utilisation initiale de std::unique_ptr dans ce code est incorrecte. Il tente de gérer un pointeur vers une variable locale, ce qui contredit le contrôle requis sur la durée de vie de l'objet. Pour éviter cet écart, allouez l'objet de manière dynamique en utilisant, par exemple :

std::unique_ptr<int> ptr(new int(1));
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal