AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Unterschied zwischen nil, FreeAndNil und Free in TForm
Thema durchsuchen
Ansicht
Themen-Optionen

Unterschied zwischen nil, FreeAndNil und Free in TForm

Ein Thema von michele_tedesco · begonnen am 7. Apr 2014 · letzter Beitrag vom 14. Apr 2021
 
Benutzerbild von himitsu
himitsu

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

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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz