surcharge d'opérateur optimisée
Bonjour,
Il y a une question qui me turlupine :
Si je surcharge une méthode-opérateur (par exemple operator+) il est bien évident qu'il est préférable de faire
Code:
A operator+(const A&) const;
Plutôt que :
Code:
A operator+(const A) const;
Surtout si la copie de A est chère ... (on communique 4 octets à la place de la taille de A)
En revanche, une fois que la méthode renvoie l'objet A et que je l'affecte ou que je l'utilise dans mon code appelant (forcément sinon ça n'a pas d'intérêt ^^), y a-t-il à ce moment une copie ou bien est-ce fait de manière intelligente ?
J'imagine qu'il y a une copie non ?
Si il y a une copie, comment contourner ce problème ?
Si cela n'est pas possible, il serait plus judicieux de faire quelque chose comme ça :
Code:
A* operator+(const A*,const A*);
Donc en faisant une fonction externe, en manipulant uniquement des pointeurs, en faisant un "new" dans la fonction, et lors du retour, l'affectation ne va transférer que 4 octets.
Le problème avec ça c'est que l'appelant va devoir se charger du delete.
Qu'en pensez-vous ?
Je vous remercie par avance pour vos avis éclairés !