AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free
Thema durchsuchen
Ansicht
Themen-Optionen

Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free

Ein Thema von peacemoon · begonnen am 15. Nov 2006 · letzter Beitrag vom 16. Nov 2006
Antwort Antwort
Seite 3 von 3     123   
pertzschc

Registriert seit: 29. Jul 2005
Ort: Leipzig
305 Beiträge
 
Delphi 10.4 Sydney
 
#21

Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free

  Alt 15. Nov 2006, 21:30
Interessant was sich aus der Frage alles so ergibt!

Aber meine Detailfrage ist nun immer noch nicht vollständig beantwortet:
Ich habe eine Klasse TMyVar mit einem Member vom Typ TStringlist. Diese Member wird im Konstruktor meiner Klasse ordnungsgemäß erzeugt. Jetzt benutze ich die Klasse in einer function/procedure:
Delphi-Quellcode:
procedure TForm1.Beispiel;
var
  MyVar: TMyVar;
begin
  MyVar:=TMyVar.Create;
  // hier passiert dann mal was...
  ...
  // hier ist das Ende der Procedur:
  FreeAndNil(MyVar); // a)
  MyVar.Free; // b)
                     // c)
end;
Ist nun Variante a), b) notwendig oder muss man c) gar nichts damit machen, da am Ende der Methode die lokale Variable myVar automatisch einen .Free-Aufruf erhält?

Gruß,
Christoph
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free

  Alt 15. Nov 2006, 21:36
Zitat von pertzschc:
oder muss man c) gar nichts damit machen, da am Ende der Methode die lokale Variable myVar automatisch einen .Free-Aufruf erhält?
Delphi hat keine GarbageCollection. Die Variable wird ungültig, aber der Speicher ist noch reserviert, ergo muss ein Feee erfolgen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#23

Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free

  Alt 15. Nov 2006, 21:42
Kann man bei Records, Strings und dynamischen Arrays nicht von Garbage Collection sprechen?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#24

Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free

  Alt 15. Nov 2006, 22:00
Zitat von Muetze1:
Einer von den Geeks hier im Forum könnte uns mal aufklären, warum in DL unbedingt eine 1 stehen muss beim Aufruf von Destroy
Jeder Konstruktor und Destruktor bekommt von Delphi noch einen impliziten zusätzlichen Parameter mit der Info, ob der Speicher für das Objekt angefordert/freigegeben werden muss oder nicht. Beim direkten Aufruf eines Konstruktors/Destruktors ist dieser Parameter 1, bei inherited-Aufrufen 0.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#25

Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free

  Alt 15. Nov 2006, 22:09
Zitat von Flocke:
Zitat von Muetze1:
Einer von den Geeks hier im Forum könnte uns mal aufklären, warum in DL unbedingt eine 1 stehen muss beim Aufruf von Destroy
Jeder Konstruktor und Destruktor bekommt von Delphi noch einen impliziten zusätzlichen Parameter mit der Info, ob der Speicher für das Objekt angefordert/freigegeben werden muss oder nicht. Beim direkten Aufruf eines Konstruktors/Destruktors ist dieser Parameter 1, bei inherited-Aufrufen 0.
Danke, aber das hat Hawkeye219 mit einem vortrefflichen Post aus der Borland Hilfe/Referenz schon geklärt.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#26

Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free

  Alt 16. Nov 2006, 05:08
Hallo Kha..,

was heisst, muss nicht sein ?
Schon klar, dass man sowas vermeiden sollte.

Es ist aber so, dass FreeAndNIL nicht initialisierte Objekte
nicht erkennen kann.
Dafür gibt es ja dass NIL setzen.

Zum "Was sollte man nehmen".

Destroy nie direkt aufrufen.
Zum Freigeben .Free benutzen, falls das Objekt später nicht mehr benutzt wird,
weil es z.B. eine lokale Variable ist.
FreeAndNIL fasst 2 Befehle zusammen (Free and NIL, wer hätte das gedacht ),
macht also Sinn, wenn das Objekt mehrfach verwendet werden kann.

Wir ein Objekt über lokale Variable erzeugt und nicht freigegeben,
bleibt der Speicher belegt, bis das Programm beendet wird (nicht unter Win9X).
Wenn ich also so eine Prozedur 1 Mio. mal im Programm benutze,
frisst die jedes mal Speicher.
Und irgendwann sind auch 2 Gig weg.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#27

Re: Unterschied zwischen FreeAndNil(Objekt) und Objekt.Free

  Alt 16. Nov 2006, 12:17
Zitat von hoika:
was heisst, muss nicht sein ?
Die Wahrscheinlichkeit ist zwar eher gering, aber Pointer-Gefuchtel kann entweder nicht-reservierten Speicher treffen -> AV oder eben zufällig doch auf einen reservierten Teil zeigen. Was allerdings noch schlimmer ist, da sich das Programm im Gegensatz zum ersten Fall nach einem Free- oder sonstigen Aufruf dann in einem unvorhersagbaren, inkonsistenten (Speicher-)Zustand befindet.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 21:51 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