![]() |
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:
oder
procedure TForm1.FormDestroy(Sender: TObject);
begin FreeAndNil(sl); end;
Code:
mfg
procedure TForm1.FormDestroy(Sender: TObject);
begin sl.free; end; Helmi |
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. |
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 |
Re: Nur free oder FreeandNil
und was sollte mann jetzt generell machen?
so als profitip?? |
Re: Nur free oder FreeandNil
FreeAndNil.
@Sir T.: Du bist ja auch lustig. ;) Zitat:
|
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." |
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: ) |
Re: Nur free oder FreeandNil
Delphi-Quellcode:
Oder
sl.Free;
sl := nil;
Delphi-Quellcode:
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.
procedure D4FreeAndNil(Object: TObject);
begin Object.Free; Object := nil; end; |
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?
|
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 04:38 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