Konstruktoren & Destruktor

Jede Klasse in C++ besitzt zwei Konstruktoren, und einen Destruktor per default (ebenso einen Zuweisungsoperator). Werden diese nicht explizit vom Programmierer spezifiziert, so tut dies der Compiler für ihn. Die beiden Konstruktoren sind der Defaultkonstruktor sowie der Copykonstruktor. Der Defaultkonstruktor ist ein vom Programmierer erstellte Konstruktor mit oder ohne Argumenten, falls der Compiler ihn generiert hat er keine Argumente im Aufruf. Der Copykonstruktor, ist der Konstruktor der beim Kopieren des Objektes aufgerufen wird.

Er hat die Signatur:
Klassennamen(const Klassennamen& copy)

Bekommt also eine Referenz auf die zu kopierende Instanz der Klasse übergeben. Alle anderen Konstruktoren haben als Name ebenfalls den Klassennamen, haben aber 0 – n Parameter. Eine Klasse kann in C++ beliebig viele Konstruktoren haben, hat aber immer nur einen Destruktor.

Dieser trägt die Signatur:
~Klassennamen()

Man beachte das Tilde (~) Zeichen vor dem Klassennamen. Ein Destruktor  hat auch niemals Argumente, und wird nur selten direkt aufgerufen. Sein Aufruf erfolgt indirekt durch delete, oder beim zerstören des Stackframes, wenn das Objekt auf dem Stack liegt.

Bleibt noch die Initialisierungsliste, welche jeder Konstruktor in C++ haben kann:
MeineKlasse(int n,const MyObject& o):m_n(n),m_o(o)

Nach der Parameterliste des Funktionskopfes folgt die Initialisierungsliste, welche durch ein : eingeleitet wird. Hier können nun Membervariablen initialisiert werden, dies sollte immer in der Reihenfolge wie sie in der Deklaration deklariert wurden geschehen. Die Initialsierung erfolgt für einfache Variablen (int,float, etc.) per direkter Wertezuweisung, während bei Objekten hier ein Konstruktoraufruf erfolgt. Die Initialisierung erfolgt in dem durch new oder auf dem Stack gerade reservierten Speicher, erst nach dem Ende des Konstruktors gilt das Objekt als vollständig initialisiert.