Maison > développement back-end > C++ > Comment implémenter des constructeurs de copie pour les classes avec des membres « unique_ptr » en C 11 ?

Comment implémenter des constructeurs de copie pour les classes avec des membres « unique_ptr » en C 11 ?

Barbara Streisand
Libérer: 2024-12-03 10:54:17
original
149 Les gens l'ont consulté

How to Implement Copy Constructors for Classes with `unique_ptr` Members in C  11?

Implémentation de constructeurs de copie pour les classes avec des membres unique_ptr

Lorsque vous travaillez avec des classes qui utilisent une variable membre unique_ptr, l'implémentation d'un constructeur de copie devient cruciale. Dans cet article, nous aborderons les techniques de création de constructeurs de copie en C 11 pour de telles classes.

Comme unique_ptr ne peut pas être partagé, il est impératif soit de copier profondément son contenu, soit de le convertir en shared_ptr. L'exemple suivant illustre la copie approfondie :

class A
{
   std::unique_ptr<int> up_;

public:
   A(int i) : up_(new int(i)) {}
   A(const A&amp; a) : up_(new int(*a.up_)) {}
};
Copier après la connexion

Dans cette approche, un nouveau unique_ptr est alloué et une copie du contenu du pointeur d'origine lui est attribuée.

Alternativement, on peut utiliser un constructeur de déplacement à la place d'un constructeur de copie :

A(A&&amp; a) : up_(std::move(a.up_)) {}
Copier après la connexion

Cependant, cette méthode introduit une sémantique différente, car elle transfère la propriété du unique_ptr de la source à l'objet cible.

Pour être complet, l'ensemble complet des opérateurs d'affectation serait :

A&amp; operator=(const A&a)
{
   up_.reset(new int(*a.up_));
   return *this;
}

A&amp; operator=(A&&amp; a)
{
   up_ = std::move(a.up_);
   return *this;
}
Copier après la connexion

La décision d'utiliser des constructeurs de copie ou de déplacement dépend du contexte. Si la classe est destinée à être utilisée dans un std::vector, le choix entre rendre la classe mobile uniquement ou copiable est influencé par le fait que le vecteur doit être le seul propriétaire des objets.

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