Je dois créer un opérateur + pour ma classe, je l'ai fait comme ceci:Comment libérer la valeur retournée correctement
class CDoubleString{
public:
string textA="";
string textB="";
CDoubleString(string x,string y) : textA(x),textB(y){}
CDoubleString & operator + (const CDoubleString & y){
CDoubleString * n=new CDoubleString(textA,textB);
n->textA+=y.textA;
n->textB+=y.textB;
delete n;
return *n;
}
}
Il semble qu'il fonctionne comme prévu, mais je vois qu'il ya un problème avec libérer la mémoire. Au moment où je l'ai retourné, ça peut déjà être autre chose. Donc, c'est un comportement indéfini, ai-je raison?
Comment éviter cela?
Je recommande [cette référence] (http://en.cppreference.com/w/cpp/language/operators#Canonical_implementations) sur les implémentations canoniques des opérateurs surchargées. Plus précisément la [section sur les opérateurs binaires] (http://en.cppreference.com/w/cpp/language/operators#Binary_arithmetic_operators). Notez la différence de la valeur renvoyée par rapport à votre code. –
@Someprogrammerdude Je connais effectivement cette référence et l'utilise de temps en temps, mais je ne connaissais pas cette section. Merci. – TGar