![]() |
Dyn. Array freigeben
Hallo,
ich nutze ein dynamisches Array als Klassenvariable.
Delphi-Quellcode:
Im Konstruktor setze ich die Größe.
type
TTest = class private testarray: Array of Int64; public constructor Create(pSize: Cardinal); destructor Destroy(); end;
Delphi-Quellcode:
Außerdem habe ich auch noch eine Destruktor.
constructor TTest.Create(pSize: Cardinal);
begin SetLength(testarray, pSize); end;
Delphi-Quellcode:
MfG Christian18
destructor TTest.Destroy();
begin // sollte ich hier das array löschen? oder zerstören? wenn ja, wie? end; |
Re: Dyn. Array freigeben
Das ist das tolle an solchen Sprachfeatures: Du musst auf nichts achten. Also: Die Freigabe erfolgt automatisch (im vom Destruktor "magisch" aufgerufenen TObject.CleanupInstance, um genau zu sein).
|
Re: Dyn. Array freigeben
Ok, dann versteh ich aber eins nicht, warum macht Delphi das dann nicht auch mit Objekten?
Also wenn ich ein Array von Objekten habe, dann sollte ich diese im Destructor wieder freigeben. Warum nun mit Variablentyen nicht? MfG Christian18 |
Re: Dyn. Array freigeben
Bei Objekten weiß Delphi nicht, wem sie gehören. Wenn ein Control freigegeben wird, soll das Elterncontrol erhalten bleiben.
|
Re: Dyn. Array freigeben
Zitat:
aber falls dennoch mal jemand ein (dynamisches) Array freigeben möchte ... einfach die Länge auf 0 (null) setzen :zwinker:
Delphi-Quellcode:
in Delphi geh bei (dynamischen) Arrays aber auch sowas:
SetLength(testarray, 0);
Delphi-Quellcode:
testarray := nil;
|
Re: Dyn. Array freigeben
Aber auch nur, da der Array selber ein Zeiger ist.
|
Re: Dyn. Array freigeben
Zitat:
DynArraySetLength ist der interne Name der Funtion, welche eigentlich aufgerufen wird, wenn man SetLength auf ein dyn. Array anwendet. also hier würde der Speicher, auf welche P zeigen würde, nicht "einfach so" freigegeben :!:
Delphi-Quellcode:
Var P: Pointer;
... P := nil; |
Re: Dyn. Array freigeben
Zitat:
...was allerdings auch nur geht, wenn keine Objekte im Array enthalten sind. Diese müssten nämlich gesondert freigegeben werden, sonst gibts Memoryleaks...;) |
Re: Dyn. Array freigeben
jupp, aber diese muß man so oder so immer selber freigeben
und das hat nix mit der Freigabe des Arrays (nicht dem Inhalt ... wobei dort wie auch hier z.B. bei Strings und anderen untergeordnete dyn. Arrays wiederrum die Compilermagic eingreift :nerd: ) zu tun |
Re: Dyn. Array freigeben
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 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 by Thomas Breitkreuz