- Destruktor
-
Als Konstruktoren und Destruktoren werden in der Programmierung spezielle Prozeduren bezeichnet, die beim Erzeugen und Zerstören von Objekten oder Variablen aufgerufen werden. Konstruktoren bringen die Objekte in einen definierten Anfangszustand.
Der Konstruktor (im Englischen auch mit ctor abgekürzt) wird bei der Erzeugung der Variablen aufgerufen. Das Versetzen in den Anfangszustand wird auch als Initialisierung bezeichnet. Dabei besteht in der Regel die Möglichkeit, unterschiedliche Initialisierungsvarianten mittels der Aufrufparameter des Konstruktors auszuwählen. Im Konstruktor können auch Vorbedingungen (siehe Design by Contract) geprüft werden, um sicherzustellen, dass bei der Erstellung die so genannte Invariante erfüllt wird.
Der Destruktor (im Englischen auch mit dtor abgekürzt) wird dagegen bei der Zerstörung der Variablen aufgerufen, und erledigt ggf. Aufräumarbeiten.
Durch Konstruktoren und Destruktoren bleibt der Anschein der Atomarität der Erstellung bzw. des Abbaus gewahrt, während am Punkt der Deklaration die Möglichkeit gegeben wird, die Regeln zur Erstellung und Auflösung von Variablen des betreffenden Typs auszuformulieren.
Typische Anwendungsfälle für Konstruktoren und Destruktoren sind die Belegung und Wiederfreigabe von Systemressourcen, so etwa Netzwerkverbindungen. In manchen Programmiersprachen können Konstruktoren und Destruktoren auch dazu verwendet werden, um für die Variable erforderlichen Speicherplatz anzufordern (im Konstruktor) oder wieder freizugeben (im Destruktor).
Konstruktoren und Destruktoren finden auch bei der objektorientierten Programmierung häufige Anwendung.
Programmiersprachen wie C++ garantieren die Ausführung von Destruktoren, wann immer der Gültigkeitsbereich der Variablen verlassen wird (siehe RAII). Deshalb werden mitunter Konstruktoren und Destruktoren eingesetzt, deren einziger Zweck die Sicherstellung korrekter Ressourcenbilanz im gegebenen Kontext ist, in C++ beispielsweise bei der Template-Klasse auto_ptr.
Programmiersprachen wie Java oder Python und die Entwicklungsplattform .NET verwenden das zu Destruktoren alternative Konzept der Finalisierung, bei der Aufräumarbeiten nicht zum frühest möglichen Zeitpunkt, sondern erst mit dem nächsten Lauf der automatischen Speicherbereinigung (engl. garbage collection) durchgeführt wird. Die Prozedur, die dies erledigt, nennt sich Finalisierungsroutine oder Finalisierer. Finalisierer haben im Vergleich mit Destruktoren einige Einschränkungen. So dürfen z. B. Finalisierer im Allgemeinen nicht auf andere Objekte verweisen, da es sein kann, dass diese bereits abgebaut wurden.
Konstruktortypen
Standardkonstruktor (englisch default constructor oder nullary constructor): leere Parameterliste.
Object()
Kopierkonstruktor (englisch copy constructor): nimmt einen eigenen Objekttyp als Parameter entgegen und erstellt eine Kopie daraus (vergleiche: flache Kopie vs. tiefe Kopie)
Object( Object object )
forwarding constructor oder (als Konstrukt) constructor forwarding: gibt die Parameter an einen anderen Konstruktor weiter und verwendet optional Standardwerte für die fehlenden Parameter. Dies ist insbesondere für Programmiersprachen relevant, die keine Standardwerte unterstützen (z. B. Java, C#). Dieses Konstrukt ist zu unterscheiden von einer Initialisierungsliste, in der wirklich Werte gesetzt werden, während der forwarding constructor nur Werte weitergibt.
Object( int value1 ) : this( value, 0 )
Siehe auch
Wikimedia Foundation.