Opérateur d'affectation de copie : renvoi d'une référence par rapport à une valeur
En C, les opérateurs d'affectation de copie ne renvoient généralement pas une copie du nouvel objet mais renvoie à la place une référence ou une référence const. Pourquoi est-ce l'approche privilégiée ?
Justification du retour par référence
Premièrement, le retour par référence minimise la surcharge de calcul associée à l'affectation. Il s’agit simplement de copier des valeurs d’un objet à un autre, en évitant la création et la destruction d’objets temporaires. Ceci est particulièrement bénéfique lorsqu'il s'agit d'objets complexes ou volumineux où la construction et la suppression de copies peuvent nécessiter beaucoup de ressources.
Conséquences du retour par valeur
D'autre part, si un opérateur d'affectation de copie renvoie par valeur, il déclenche la séquence suivante pour chaque affectation :
Cette séquence se répète pour chaque affectation dans une chaîne, ce qui entraîne des appels excessifs de constructeur et de destructeur. Considérons le scénario suivant :
A a1(param); A a2 = a1; A a3; a3 = a2; // Line in question
Si Operator= renvoie par valeur, cela nécessiterait deux appels de constructeur et de destructeur pour les affectations à a2 et a3, alors que le retour par référence évite cette surcharge.
Considérations supplémentaires
Le retour par référence permet également à l'opérateur d'affectation de renvoyer une lvalue, permettant ainsi des modifications supplémentaires du objet attribué. En revanche, le retour par valeur entraîne une valeur r, qui ne peut pas être modifiée directement.
Conclusion
Bien que le retour par référence soit la pratique standard pour les opérateurs d'affectation de copie en C , il est important de peser le contexte et les exigences spécifiques lors du choix d’un type de retour approprié. Cependant, pour la plupart des scénarios impliquant l'efficacité et la gestion d'objets, renvoyer une référence reste le choix privilégié.
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!