![]() |
Finalize
Hey there
Ich habe folgende Situation:
Delphi-Quellcode:
Um hier aufzuräumen, genügt:
var
Foo: array of PDouble; I: Integer; begin SetLength(Foo, 10); for I:= Low(Foo) to High(Foo) do New(Foo[I]); { ... } end;
Delphi-Quellcode:
Oder braucht es doch eine Schleife?
Finalize(Foo);
Delphi-Quellcode:
Bin mir nie richtig darüber klar geworden, was Finalize genau macht... :?
for I:= Low(Foo) to High(Foo) do
Dispose(Foo[I]); SetLength(Foo, 0); Greets Shaman |
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". |
Re: Finalize
Ah okee, danke dir :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:08 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