


Une fonction commune peut-elle simplifier les surcharges des constructeurs de copie et des opérateurs d'affectation ?
Nov 27, 2024 am 03:15 AMCréation d'une fonction commune pour le constructeur de copie et l'opérateur d'affectation
Un constructeur de copie et une surcharge d'opérateur d'affectation partagent souvent un code similaire et ne diffèrent que par leur type de retour. Pouvons-nous simplifier cela en créant une fonction commune que les deux peuvent utiliser ?
Option 1 : appeler explicitement Operator= à partir du constructeur de copie
MyClass(const MyClass& other) { operator=(other); }
Cette approche est généralement déconseillée car cela introduit des problèmes avec l’ancienne gestion étatique et l’auto-affectation. De plus, il initialise par défaut tous les membres, même s'ils sont affectés à partir de l'autre objet.
Option 2 : Implémentation de l'opérateur = Utilisation du constructeur de copie et de l'échange
Un choix préféré La solution implique d'implémenter Operator= en utilisant le constructeur de copie et une méthode d'échange :
MyClass& operator=(const MyClass& other) { MyClass tmp(other); swap(tmp); return *this; }
Ou même :
MyClass& operator=(MyClass other) { swap(other); return *this; }
La fonction d'échange échange la propriété des données internes sans nettoyer l'état existant ni allouer de nouvelles ressources. Cette approche est sécurisée pour l'auto-affectation et fortement sécurisée pour les exceptions, à condition que l'opération d'échange soit sans lancer.
Précautions :
Assurez-vous que la méthode d'échange effectue une véritable swap, pas le std::swap par défaut, qui repose sur le constructeur de copie et l'opérateur d'affectation lui-même. Utilisez l'échange par membre pour les types primitifs et les types de pointeurs afin de garantir un comportement sans lancer.
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Gulc: Cibliothèque C construite à partir de zéro

Quels sont les types de valeurs renvoyées par les fonctions du langage C? Qu'est-ce qui détermine la valeur de retour?

C Fonction Langue Format de lettre ÉTAPES DE CONVERSION DE CAS

Quelles sont les définitions et les règles d'appel des fonctions du langage C et quelles sont les

Utilisation distincte et partage de phrases

Où est la valeur de retour de la fonction de langue C stockée en mémoire?

Comment fonctionne la bibliothèque de modèle standard C (STL)?

Comment utiliser efficacement les algorithmes du STL (trier, trouver, transformer, etc.)?
