Maison > développement back-end > C++ > Pourquoi renvoyer une référence, pas une valeur, à partir d'un opérateur d'affectation de copie C ?

Pourquoi renvoyer une référence, pas une valeur, à partir d'un opérateur d'affectation de copie C ?

Mary-Kate Olsen
Libérer: 2024-12-15 16:47:08
original
884 Les gens l'ont consulté

Why Return a Reference, Not a Value, from a C   Copy Assignment Operator?

Retour par référence dans l'opérateur d'affectation de copie : un concept alambiqué dévoilé

Le concept de renvoi d'une référence à partir de l'opérateur d'affectation de copie en C peut être perplexe. Pourquoi ne pas simplement renvoyer une copie du nouvel objet ? Pour résoudre cette énigme, examinons un exemple impliquant une classe A et son opérateur d'affectation :

class A {
public:
    A(int param);
    A& operator=(const A& a);

private:
    int param;
};

int main() {
    A a1(10);
    A a2 = a1;
    A a3;

    a3 = a2; // The problematic line
}

A::A(int param) : param(param) {}

A& A::operator=(const A& a) {
    if (this == &a) {
        return *this;
    }
    param = a.param;
    return *this;
}
Copier après la connexion

Au départ, renvoyer une valeur à partir de l'opérateur d'affectation semble être une option viable. Cependant, retourner par valeur dans ce contexte présente plusieurs inconvénients. À chaque appel à l'opérateur d'affectation, un constructeur et un destructeur sont invoqués. Considérez la chaîne d'affectation suivante :

a = b = c;
Copier après la connexion

Lorsque vous renvoyez une valeur, cette chaîne déclenche deux appels à l'opérateur d'affectation, deux appels au constructeur de copie et deux appels au destructeur. Ce processus inutile consomme des ressources inutiles et n'offre aucun avantage tangible.

En revanche, le retour par référence minimise considérablement les frais généraux. Les valeurs sont copiées d'un objet à un autre sans qu'il soit nécessaire d'appeler un constructeur ou un destructeur supplémentaire. Cette optimisation est particulièrement cruciale dans les scénarios complexes où plusieurs affectations se produisent.

En résumé, le retour par valeur dans l'opérateur d'affectation de copie n'offre aucun avantage mais entraîne des pénalités de performances importantes. En revanche, le retour par référence garantit une utilisation efficace des ressources tout en conservant la fonctionnalité de l'opérateur.

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