Also brauche ich Inherited Destroy in Nachfahren auch nicht aufrufen, oder?
Doch, musst du! Embarcadero wartet bloß darauf, das das jemand so macht, um bei der nächsten Version irgendeinen immens wichtigen Code dort auszuführen, der dein Programm dann crashen lässt, weil er dort nicht ausgeführt wird.
OK, Spaß beiseite. Man ruft
immer (irgendjemand findet hier sicher noch eine Ausnahme) inherited Destroy auf ebenso wie
inherited Create, weil man eben nicht von obigem Szenario betroffen sein möchte, falls es mal wirklich so kommt.
Wie weiß Delphi das Owner und Number auf dem Heap frei sind wenn MYObject.free keinen Code ausführt?
Create und
Destroy sind nur die Stellen, wo der Delphi-Entwickler eingreifen soll/kann, z.B. wenn Felder in der Klasse auf Instanzen zeigen, die ebenfalls freigegeben werden müssen. Die eigentliche Erzeugung und Freigabe der Instanzen und deren Inhalte erfolgt in
NewInstance und
FreeInstance, die vom Compiler implizit aufgerufen werden (z.B.
_ClassCreate und
_ClassDestroy, aber das ist ein ziemlich komplexes Thema und nicht in zwei Sätzen umfassend zu beschreiben). Das unterscheidet einen
constructor/destructor eben von einer normalen (class-)method eines TObjects.