Der Kopierkonstruktor

Ein weiterer Konstruktor, der im Zusammenhang mit Zählern sinnvoll ist, ist der Kopierkonstruktor bzw. neudeutsch Copykonstruktor. Er dient dazu, ein Objekt zu kopieren, d.h. ein neues Objekt genau den gleichen Inhalt zu geben wie einem schon vorhandenen. Dabei wird bei der Instanzierung des neuen Objektes das alte als Parameter übergeben. Der Aufruf des Kopierkonstruktors sähe für die Beispielklasse so aus (Klonen von virtuellen Gästen wird strafrechtlich hoffentlich noch nicht verfolgt):

  gast neuerGast(alterGast);

Alternativ läßt sich dies natürlich auch mit dem Zuweisungsoperator machen:

  gast neuerGast;
neuerGast = alterGast;

Bei dieser Vorgehensweise können aber Probleme auftauchen. Der Compiler kopiert bei einer Zuweisung mit dem Zuweisungsoperator standardmäßig das alte Objekt elementweise in das neue Objekt. Falls dabei Elemente selbst zusammengesetzt sind, entsteht dabei eine Rekursion. Dabei wird allerdings nicht der Zähler mit hochgezählt, um dies zu gewährleisten muß man einen Kopierkonstruktor verwenden (oder die Funktionsweise des Zuweisungsoperators ändern, doch das erst im Kapitel Operatoren ). Wie eine Übergabe von Objekten funktioniert lernen wir allerdings erst im nächsten Kapitel kennen, daher wird der Kopierkonstruktor erst dort richtig eingeführt. Er wird dort auch noch eine spezielle Rolle bei der Übergabe von Objekten spielen.

Dabei erzeugt ein Gleichheitszeichen bei der Deklaration (etwa wie folgt)

  gast neuerGast = alterGast;

keinen Aufruf des Zuweisungsoperators, sondern des Kopierkonstruktors. Diese Unterscheidung ist wichtig, wenn man beide Methoden explizit programmiert. Der Zuweisungsoperator wird nur benutzt, wenn das Objekt bereits initialisiert wurde.

Ein weiterer wichtiger Bereich für den Einsatz von Kopierkonstruktoren wird noch im Kapitel Pointer erläutert werden.