Suchen und Finden
Service
Infos und Kontakt
KAPITEL 10 Destruktoren für Objekte (S. 125-126)
In den vorigen zwei Kapiteln haben wir uns mit den Grundlagen des Anlegens von Objekten und deren Manipulation beschäftigt. In diesem Kapitel geht es um ein genauso wichtiges Thema: Was passiert, wenn ein Objekt gelöscht wird?
Wie Sie aus Kapitel 4 wissen, gibt Perl den Arbeitsspeicher für eine Datenstruktur automatisch wieder frei und entfernt die Links auf andere Daten, sobald die letzte Referenz darauf gelöscht wurde. Das heißt natürlich, dass andere (»innere« oder »enthaltene«) Datenstrukturen eventuell auch gelöscht werden.
Standardmäßig funktioniert dieses Vorgehen auch bei Objekten, weil Objekte die gleiche Referenzenstruktur verwenden, um komplexere Objekte anzulegen. Ein Objekt, das auf einem Hash basiert, wird endgültig gelöscht, wenn die letzte Referenz auf den Hash entfernt wird. Sind die Werte des Hashs selbst Referenzen, werden diese auf ähnliche Weise entfernt, wodurch möglicherweise weitere Dinge gelöscht werden.
Vielleicht benutzt ein Objekt aber auch eine temporäre Datei, um Daten abzulegen, die nicht komplett in den Arbeitsspeicher passen. Das Dateihandle für diese Datei kann als Instanzvariable im Objekt gespeichert werden. Auch wenn der normale Mechanismus zum Zerstören eines Objekts das Handle korrekt schließt, bleibt die temporäre Datei weiterhin auf Ihrer Festplatte – es sei denn, Sie ergreifen weitere Schritte.
Um bei der Zerstörung eines Objekts die angemessenen Aufräumarbeiten durchführen zu können, brauchen Sie eine Möglichkeit, davon zu erfahren. Glücklicherweise kann Perl Sie auf Anfrage über die Zerstörung eines Objekts informieren. Diese Benachrichtigung auf Anfrage richten Sie ein, indem Sie einem Objekt eine DESTROY-Methode mitgeben.
Sobald die letzte Referenz auf ein Objekt, beispielsweise $bessie, gelöscht wird, ruft Perl diese Methode wie folgt auf:
$bessie->DESTROY
Dieser Methodenaufruf funktioniert wie die meisten anderen Methodenaufrufe auch: Perl sucht als Erstes in der Klasse des Objekts nach der Methode und arbeitet sich dann in der Vererbungshierarchie nach oben, bis eine passende Methode gefunden wurde. Im Gegensatz zu anderen Methoden gibt es in diesem Fall jedoch keine Fehlermeldung, wenn keine passende Methode gefunden werden konnte.
Wenn Sie dies auf unsere Klasse Animal aus Kapitel 9 anwenden wollen, können Sie sich für das Debugging mit Hilfe einer DESTROY-Methode ausgeben lassen, welche Objekte gelöscht werden: ....
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.; Ersparnis im Vergleich zur Printversion




















