Maison > développement back-end > C++ > Comment les paramètres « unique_ptr » doivent-ils être transmis dans les constructeurs et les fonctions C ?

Comment les paramètres « unique_ptr » doivent-ils être transmis dans les constructeurs et les fonctions C ?

Barbara Streisand
Libérer: 2024-12-18 10:08:11
original
222 Les gens l'ont consulté

How Should `unique_ptr` Parameters Be Passed in C   Constructors and Functions?

Comment les paramètres unique_ptr doivent être gérés dans les constructeurs et les fonctions

Scénario

Considérez une classe Base se référençant comme suit :

class Base {
public:
  typedef unique_ptr<Base> UPtr;

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

  virtual ~Base() {}

  void setNext(Base::UPtr n) {
    next = std::move(n);
  }

protected:
  Base::UPtr next;
};
Copier après la connexion

Méthodes pour transmettre les arguments unique_ptr

Pour utiliser efficacement les paramètres unique_ptr, envisagez les méthodes suivantes :

1. Par valeur (A)

Base(std::unique_ptr<Base> n) : next(std::move(n)) {}
Copier après la connexion

Lorsqu'elle est appelée en tant que Base newBase(std::move(nextBase));, cette méthode transfère la propriété du pointeur vers la fonction. Après la construction, nextBase devient vide.

2. Par référence de valeur l non const (B)

Base(std::unique_ptr<Base> &n) : next(std::move(n)) {}
Copier après la connexion

Cela nécessite une valeur l réelle (variable nommée) et permet à la fonction de revendiquer potentiellement la propriété du pointeur.

3. Par const l-value Reference (C)

Base(std::unique_ptr<Base> const &n);
Copier après la connexion

Cela empêche la fonction de stocker le pointeur, mais garantit l'accès à l'objet pendant toute la durée de son exécution.

4. Par référence de valeur r (D)

Base(std::unique_ptr<Base> &&n) : next(std::move(n)) {}
Copier après la connexion

Similaire à (B), mais nécessite l'utilisation de std::move lors du passage d'arguments non temporaires. La fonction peut ou non revendiquer la propriété.

Recommandations

  • Méthode (A) doit être utilisée lors du transfert de propriété à la fonction .
  • La méthode (C) est recommandée pour les fonctions qui utilisent simplement le unique_ptr pendant leur durée.
  • La méthode (D) doit être évitée en raison de son ambiguïté concernant le transfert de propriété.

Manipuler unique_ptr

Pour déplacer un unique_ptr, utilisez std::move. Cela évite la copie et garantit un transfert de propriété correct.

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