Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Nur free oder FreeandNil (https://www.delphipraxis.net/25017-nur-free-oder-freeandnil.html)

Helmi 29. Jun 2004 21:40


Nur free oder FreeandNil
 
Hallo,

ich hab grad einen thread durchgelesen und da wurde eine stringlist in dem Event "OnDestroy" mit freeAndNil freigegeben

ich wollte mal fragen was ist besser:

Code:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(sl);
end;
oder

Code:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  sl.free;
end;
mfg
Helmi

neolithos 29. Jun 2004 21:45

Re: Nur free oder FreeandNil
 
FreeAndNil setzt die Variable noch auf nil, diesen Mehraufwand sollte man hinsichtlich der Fehlersuche vorziehen.

Free tut dies nicht, ist deshalb ein paar Takte schneller, was man aber nicht großartig merkt.

SirThornberry 29. Jun 2004 21:48

Re: Nur free oder FreeandNil
 
Najs, wirklich besser ist keins von beiden. Es kommt drauf an was dir besser gefällt. Bei "Free" wird einfach der speicher freigegeben und das Object zerstört. Bei "FreeAndNil" wird das Objectauch freigegeben und der zeiger auf nil gesetzt. Im Normalfall reicht ein einfaches Free.

Wenn du nach dem freigeben der pointer nicht auf "nil" gesetzt wird ist es nicht so leicht heruaszufinden ob das Object bereits freigegeben wurde. Wenn du allerdings vorher FreeAndNil aufrufst kanns du später mit "Object = nil" überprüfen ob das Object bereits frei gegeben wurde

Helmi 29. Jun 2004 21:48

Re: Nur free oder FreeandNil
 
und was sollte mann jetzt generell machen?
so als profitip??

Luckie 29. Jun 2004 21:53

Re: Nur free oder FreeandNil
 
FreeAndNil.

@Sir T.: Du bist ja auch lustig. ;)
Zitat:

Najs, wirklich besser ist keins von beiden.
Und dann im zweiten Absatzt schreibst du praktisch ein Pro für FreeAndNil. :mrgreen:

neolithos 29. Jun 2004 21:54

Re: Nur free oder FreeandNil
 
Ich benutze meist FreeAndNil, da ich so schnell Fehler, durch zu früh freigegebene Objecte erkennen kann.

--> "Zugriff auf Adresse (nahe 0) konnte nicht ausgeführt."

Uncle Cracker 29. Jun 2004 21:58

Re: Nur free oder FreeandNil
 
Und was muss ich machen unter Delphi 4? Da reicht doch auch ein normales Free oder muss ich da sonst noch was anderes machen?

PS: Unter Delphi 4 gibt es kein FreeAndNil (bzw. ich bin wirklich so doof das ich es nicht finde :roll: :gruebel: :stupid: )

Luckie 29. Jun 2004 22:05

Re: Nur free oder FreeandNil
 
Delphi-Quellcode:
sl.Free;
sl := nil;
Oder
Delphi-Quellcode:
procedure D4FreeAndNil(Object: TObject);
begin
  Object.Free;
  Object := nil;
end;
Es verhält sich so: Free entfernt nur das Objekt aus dem Speicher, die Objektvariable beinhaltet abr noch eine "gültige" Zeiger-Adresse, die aber nach dem Free je doch auf einen ungültigen Speicherbereich verweist. Da die Objektvariable immer noch einen gültigen Zeiger beinhaltet liefert ein Test mit Assigned auch nach einem Free noch True zurück. FreeAndNil setzt die Objektvariable eben noch zurück - auf nil eben, wie der Prozedurname schon vermuten läßt.

phXql 29. Jun 2004 22:26

Re: Nur free oder FreeandNil
 
wenn ich ein object nur .free'e, wie kann ich dann prüfen, ob das objekt noch da is oder nich?

Luckie 29. Jun 2004 22:28

Re: Nur free oder FreeandNil
 
Gar nicht. Bzw. du greifst drauf zu und wenn es kracht, gab es das Objekt nicht mehr. Deswegen habe ich mir angewöhnt FreeAndNil zu benutzen auch wenn ich Objekte im OnDestroy Event der Form freigebe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz