void f()
{
string s1(10);
string s2(20);
s1 = s2;
};
Das Problem ergibt sich beim Verlassen des Gültigkeitsbereichs der
beiden Objekte, d.h. wenn die Destruktoren aufgerufen werden. Bei
der Zuweisung s1=s2
wird der Zeiger auf das eine Array
überschrieben, der andere Zeiger dupliziert. Bei s1
und s2
handelt es sich damit um dasselbe Array! Der Destruktor wird am Ende des
Gültigkeitsbereichs für beide Objekte aufgerufen, d.h. dasselbe
Array wird zweimal deallociert, mit vorhersehbar katastrophalen Folgen.
Wie man derartige Probleme löst, wird in Kapitel 19, Dynamische Speicherverwaltung, beschrieben.