"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment transmettre des pointeurs exclusifs en fonction ou paramètres du constructeur en C ++?

Comment transmettre des pointeurs exclusifs en fonction ou paramètres du constructeur en C ++?

Publié le 2025-06-14
Parcourir:339

How Should I Pass Unique Pointers as Function or Constructor Arguments in C  ?

Gérer les pointeurs uniques en tant que paramètres dans les constructeurs et les fonctions

des pointeurs uniques ( UNIQUE_PTR ) Remollissez le principe de plusieurs options dans C 11. Lorsque vous traitez des pointeurs uniques en fonction ou des arguments de constructeur, plusieurs options sont en train implications.

passant par valeur:

Base(std::unique_ptr n)
  : next(std::move(n)) {}

Cette méthode transfère la propriété du pointeur unique vers la fonction / objet. Le contenu du pointeur est déplacé dans la fonction, laissant le pointeur d'origine vide après l'opération.

passant par la référence de la valeur L non-conforme:

Base(std::unique_ptr &n)
  : next(std::move(n)) {}

permet à la fonction d'accéder à la fois et 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.

passant par la base de const l-value:

Base(std::unique_ptr const &n);

passant par la référence R-Value:

base (std :: unique_ptr && n) : Suivant (std :: move (n)) {}

Base(std::unique_ptr &&n)
  : next(std::move(n)) {}
Lorsque la fonction a besoin d'un accès temporaire au pointeur.

Considérez des approches alternatives: Évitez de passer par référence R-Value, car il introduit l'incertitude sur la propriété. Utilisez Std :: Move. La copie d'un pointeur unique n'est pas autorisée:

std :: unique_ptr newptr (std :: move (oldptr));
    Dernier tutoriel Plus>

    Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

    Copyright© 2022 湘ICP备2022001581号-3