Zitat:
Warum braucht man überhaupt das inherited im Destruktor? Könnte Delphi das nicht automatisch aufrufen? ...
Und was währe, wenn ich was überschreiben will, ohne daß die Vorfahrmethoden ausgeführt werden?
Beim Destruktor ist das verboten! Die Kette der Destruktoren
muss abgearbeitet werden; sie darf nicht unterbrochen werden. Falls doch, droht ein Resourcen-/Speicherleck.
Eine abgeleitete Klasse kann und darf nicht wissen, was in den Basisklassen über ihr freigegeben wird.
Und außerdem kann man über das Inherited entscheiden wann der Vorfahr ausgeführt wird. (zu Anfang, zwischendrin, am Ende oder garnicht)
Resourcen (Speicher, Handles,...) sollten immer in umgekehrter Weise freigegeben werden, in der sie angefordert wurden; das ist der sicherste Weg.
Die Freiheit in Delphi zuerst die ererbten Resourcen freigeben zu können und dann erst die eigenen Resourcen freizugeben sollte
die absolute Ausnahme bleiben.
Ein Destruktor, der kein inherited aufruft, muss als potentielles Resourcen-/Speicherleck betrachtet werden.
Der Compiler sollte dies als Fehler betrachten oder zumindest eine Warnung ausgeben.
Jetzt fehlt nur noch der Constructor. ...Class Constructor ...Class Destructor
Ich habe das Thema mit Absicht auf den Destruktor beschränkt; das erzeugt schon genügend Diskussionsstoff