Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Finalize (https://www.delphipraxis.net/74921-finalize.html)

Shaman 10. Aug 2006 22:01


Finalize
 
Hey there

Ich habe folgende Situation:

Delphi-Quellcode:
var
  Foo: array of PDouble;
  I: Integer;
begin
  SetLength(Foo, 10);
  for I:= Low(Foo) to High(Foo) do
    New(Foo[I]);
  { ... }
end;
Um hier aufzuräumen, genügt:
Delphi-Quellcode:
Finalize(Foo);
Oder braucht es doch eine Schleife?
Delphi-Quellcode:
for I:= Low(Foo) to High(Foo) do
  Dispose(Foo[I]);
SetLength(Foo, 0);
Bin mir nie richtig darüber klar geworden, was Finalize genau macht... :?

Greets
Shaman

jbg 10. Aug 2006 22:09

Re: Finalize
 
Finalize gibt nur Speicher für Referenz-Datentypen frei, nicht jedoch den mit New() alloziierten Speicher. Für jedes ausgeführt New muss auch ein entsprechendes Dispose vorhanden sein.

Finalize braucht man explizit nur, wenn man einen Record mittels GetMem alloziiert hat und ihn nun mit FreeMem freigibt. Vor dem FreeMem muss dann das Finalize(p^) stehen. Und auch nur dann, wenn im Record Referenz-Datentypen enthalten sind. Aber das sagt einem der Compiler dann schon: "Hinweis: Datentyp benötigt kein Finalize".

Shaman 10. Aug 2006 22:12

Re: Finalize
 
Ah okee, danke dir :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 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