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));
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));
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!