Spezielle Operatoren: Zuweisungs-Operator (2/2)

Beispiel (Fortsetzung)

Diese Deklaration kann zu Problemen führen, wie der folgende Programmcode zeigt:

  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.