Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#25

AW: Unterschied zwischen nil, FreeAndNil und Free in TForm

  Alt 13. Apr 2021, 13:18
Delphi-Quellcode:
Form1.Free;
Form1 := nil;
// oder
FreeAndNil(Form1);
von außerhalb. (niemals im eigenen OnClose oder Dergleichen)

Wobei FreeAndNil ein "Schutz" ist, denn eigentlich macht es "NilAndFree", damit selbst bei einer Exception im Destructor die Variable definitiv immer auf NIL steht.

Delphi-Quellcode:
// im OnClose
Action := caFree;
if Form1 = Self then Form1 := nil; // das vielleicht ach erst im OnDestroy
"irgendwas" auf NIL zu setzen ist jedenfalls nicht die gute Art,
denn ist die z.B. Form mehrfach geladen, wenn würde man vielleicht den "falschen" Instanz-Zeiger aus der Variable löschen.

Beispiel: Die Form wird via Form1.Release; freigegeben, also nicht jetzt, sondern später.
in der Zwischenzeit wird die Form erneut angezeigt (neue Instanz), bevor die VCL zum verarbeiten der Message kam,
also die alte Instanz wird erst freigegeben, wenn die Neue schon da ist und in der Variable steht womöglich schon der neue Instanz-Zeiger.

[EDIT]
Nicht "vielleicht", sondern "definitiv",
denn bei einem direkten .Free wird OnClose garnicht aufgerufen.


[INFO] Ich weiß, is bissl spät, aber wenn Andere das grade lesen, dann vielleicht doch nochmal bissl was genauer beschrieben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat