Maison > développement back-end > C++ > Une fonction commune peut-elle simplifier les surcharges des constructeurs de copie et des opérateurs d'affectation ?

Une fonction commune peut-elle simplifier les surcharges des constructeurs de copie et des opérateurs d'affectation ?

Mary-Kate Olsen
Libérer: 2024-11-27 03:15:12
original
407 Les gens l'ont consulté

Can a Common Function Simplify Copy Constructor and Assignment Operator Overloads?

Cré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);
}
Copier après la connexion

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;
}
Copier après la connexion

Ou même :

MyClass& operator=(MyClass other) {
    swap(other);
    return *this;
}
Copier après la connexion

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!

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