AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Nur free oder FreeandNil

Ein Thema von Helmi · begonnen am 29. Jun 2004 · letzter Beitrag vom 30. Jun 2004
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#1

Nur free oder FreeandNil

  Alt 29. Jun 2004, 21:40
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
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#2

Re: Nur free oder FreeandNil

  Alt 29. Jun 2004, 21:45
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.
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Nur free oder FreeandNil

  Alt 29. Jun 2004, 21:48
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
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.312 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Nur free oder FreeandNil

  Alt 29. Jun 2004, 21:48
und was sollte mann jetzt generell machen?
so als profitip??
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Nur free oder FreeandNil

  Alt 29. Jun 2004, 21:53
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
neolithos

Registriert seit: 31. Jul 2003
Ort: Dresden
1.386 Beiträge
 
Delphi 7 Architect
 
#6

Re: Nur free oder FreeandNil

  Alt 29. Jun 2004, 21:54
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."
- ciao neo -
Es gibt niemals dumme Fragen, sondern nur dumme Antworten!
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#7

Re: Nur free oder FreeandNil

  Alt 29. Jun 2004, 21:58
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 )
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Nur free oder FreeandNil

  Alt 29. Jun 2004, 22:05
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#9

Re: Nur free oder FreeandNil

  Alt 29. Jun 2004, 22:26
wenn ich ein object nur .free'e, wie kann ich dann prüfen, ob das objekt noch da is oder nich?
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Nur free oder FreeandNil

  Alt 29. Jun 2004, 22:28
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 14:04 Uhr.
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