Lokale Objekte existieren nicht mehr nach Rückkehr aus der Funktion.
Abhilfe durch dynamische allokierte Objekte birgt die Gefahr des Speicher-Lecks:
complex& operator +(const complex& c1,
const complex& c2)
{ complex* res = new complex
(c1.r + c2.r,
c1.i + c2.i);
return *res;
}
Wer ruft das dazugehörige delete auf?.
complex& four = two + two;
...
delete &four;
Entweder der Programmierer vergißt es, oder er hat gar keine Chance:
complex eight = two + two + two + two;
Also: Wertrückgabe.