3.7 Der Destruktor
Ein Konstruktor wird aufgerufen, wenn das Objekt einer Klasse erzeugt wird. Damit beginnt der Lebenszyklus des Objekts, der spätestens in dem Moment endet, wenn das Pendant des Konstruktors aufgerufen wird: der Destruktor. Im Destruktor sind normalerweise Anweisungen enthalten, um die von einem Objekt beanspruchten Fremdressourcen (»unmanaged« Ressourcen) freizugeben. Dazu gehören unter anderem Netzwerk- oder Datenbankverbindungen, die in einer objektinternen Referenz vorgehalten werden.
Der Umstand, der zur Aufgabe eines Objekts führt, kann
- das Verlassen des Gültigkeitsbereichs der Objektvariablen oder
- die Zuweisung von null an die Objektreferenz
sein. Das bedeutet jedoch nicht, dass beim Eintreten einer dieser beiden Bedingungen sofort der Destruktor ausgeführt wird. Tatsächlich kann das noch eine unbestimmbare Zeit dauern, da für den Aufruf des Destruktors der Garbage Collector zuständig ist. Dieser wird normalerweise nur von der Laufzeit angestoßen. Mit anderen Worten bedeutet das aber auch, dass das Objekt zwar aus Sicht des Programms nicht mehr existiert, sich jedoch immer noch im Speicher befindet und diesen letztendlich belastet.
Ich möchte an dieser Stelle nicht die Aspekte und Hintergründe der Objektzerstörung und der damit verbundenen Garbage Collection erörtern. Dazu bedarf es noch weiter gehender Kenntnisse der Objektorientierung. Insbesondere sind damit die Interfaces gemeint, die wir im nächsten Kapitel behandeln werden. Erst im Kontext der Interfaces werden alle Zusammenhänge klar. Da wir uns in diesem Kapitel aber mit den allgemeinen Kriterien des Klassenkonzepts beschäftigen, sollte der Destruktor zumindest erwähnt werden. Für unsere Klasse Circle lautet er wie folgt:
~Circle()
{
[...]
}
Listing 3.39 Destruktor in der Klasse »Circle«
Eingeleitet wird der Destruktor mit dem Tildezeichen, danach folgt der Klassenbezeichner mit dem obligatorischen runden Klammerpaar, dem sich der Anweisungsblock anschließt. Ein Destruktor enthält weder einen Zugriffsmodifizierer noch eine Parameterliste oder die Angabe eines Rückgabetyps.
Da ein Destruktor nicht aus dem Programmcode heraus direkt aufgerufen werden kann, soll es an dieser Stelle genügen. Wie bereits angedeutet, erhalten Sie weiter gehende Informationen rund um die Objektzerstörung in Kapitel 4.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.