Maison >développement back-end >C++ >Comment dois-je transmettre des pointeurs uniques en tant qu'arguments de fonction ou de constructeur en C ?
Les pointeurs uniques (unique_ptr) respectent le principe de propriété unique en C 11. Lors de la négociation avec des pointeurs uniques comme arguments de fonction ou de constructeur, plusieurs options se présentent avec des implications.
Base(std::unique_ptr<Base> n) : next(std::move(n)) {}
Cette méthode transfère la propriété du pointeur unique vers la fonction/l'objet. Le contenu du pointeur est déplacé dans la fonction, laissant le pointeur d'origine vide après l'opération.
Base(std::unique_ptr<Base> &n) : next(std::move(n)) {}
Autorise la fonction à la fois d’accéder et potentiellement de revendiquer la propriété du pointeur unique. Cependant, ce comportement n'est pas garanti et nécessite une inspection de l'implémentation de la fonction pour déterminer sa gestion du pointeur.
Base(std::unique_ptr<Base> const &n);
Empêche la fonction de revendiquer la propriété du pointeur unique. Le pointeur est accessible mais non stocké ou modifié.
Base(std::unique_ptr<Base> &&n) : next(std::move(n)) {}
Comparable au passage par référence de valeur L non const , mais nécessite l'utilisation de std::move lors du passage d'arguments non temporaires. la propriété peut ou non être revendiquée par la fonction, ce qui la rend moins prévisible.
Pour déplacer un pointeur unique, utilisez std :: déplacer. La copie d'un pointeur unique n'est pas autorisée :
std::unique_ptr<Base> newPtr(std::move(oldPtr));
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!