Einzelnen Beitrag anzeigen

QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.930 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wo wird der Heap von Feldvariablen von Objekten freigegeben?

  Alt 23. Feb 2023, 14:26
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.
Also wann wird _ClassDestroy aufgerufen? Es ist ne CompilerMagic sache nehme ich an so wie der RefCount bei ARC.
Wird es automatisch nach .Free eingefügt?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat