![]() |
laufzeit-komponenten-array freigeben
hi
ich habe zur laufzeit ein array mit komponenten erstellt (in meinem fall mit tabsheets)
Delphi-Quellcode:
jetzt möchte gerne folgendes wissen
for i := 0 to 3 do
begin SetLength(ts_graphen, succ(i)); tabsheet[i] := TTabSheet.Create(pagecontrol); tabsheet[i].PageControl := pagecontrol; end; 1. ist der speicher der die 4 tabsheets belegen freigegeben und =NIL wenn ich nur das pagecontrol lösche? 2. wie kann ich die einzelnen tabsheets oder auch allg. die komponenten des arrays einzeln selbst freigeben? ich dachte so
Delphi-Quellcode:
funktioniert auch aber nur beim ersten beim 2. bekomme ich ne exception!
for i := 0 to 3 do
begin tabsheet[i].Free; tabsheet := nil; end; |
Re: laufzeit-komponenten-array freigeben
Hi,
Versuchs mal so:
Delphi-Quellcode:
Gruß
for i := 3 downto 0 do
begin FreeAndNil(tabsheet[0]); end; Stephan :dance: :xmas: |
Re: laufzeit-komponenten-array freigeben
nein ich bin doof :wall: :wall: :wall:
so gehts natürlich auch
Delphi-Quellcode:
for i := 0 to 3 do
begin tabsheet[i].Free; tabsheet[i] := nil; end; |
Re: laufzeit-komponenten-array freigeben
zu 1.: Ja ist er. In der Create Methode gibst du den Owner an und der ist für den Speicher verantwortlich. Gibst du den Owner frei, wird auch automatisch der Speicher dessen Child Kontrols freigegeben.
|
Re: laufzeit-komponenten-array freigeben
Wenn man schon OOP betreibt, dann bitte richtig! :roll: :wink:
Es gibt ein Klasse, das nennt sich TObjectList. Zitat:
|
Re: laufzeit-komponenten-array freigeben
Moin Christoph,
SetLength solltest Du nicht in der Schleife aufrufen, sondern das Array, möglichst, gleich auf die erforderliche Grösse bringen, da hier jedesmal Speicher neu angefordert, und der alte Inhalt auf den neuen Platz kopiert wird. Das geht auf die Performance. Warum dimensionierst Du eigentlich ein Array Namens ts_graphen, und weist dann einem Array TabSheets die Werte zu :gruebel: |
Re: laufzeit-komponenten-array freigeben
Hallo,
zu diesem Thema hätt ich auch eine Frage. Dieses passt auch zu diesem Thread - deshalb mach ich mal keinen neuen Thread auf. Also: Ich beschreibe im OnCreate folgendes Array:
Code:
und gib dieses Array im OnDestroy wieder frei, nämlich so:
for i := 1 to length(UpdateIcons) do
UpdateIcons[i] := TIcon.Create;
Code:
Reicht das zum Freigeben oder muss ich jedes Array-Element (oder wie man das bezeichen soll) in einer Schleife explizit freigeben?
FreeAndNil(UpdateIcons);
etwa so:
Code:
mfg
for i := 1 to length(UpdateIcons) do
FreeAndNil(UpdateIcons[i]); Helmi |
Re: laufzeit-komponenten-array freigeben
Moin Helmi,
kurze Frage: Zitat:
Ja, musst Du. |
Re: laufzeit-komponenten-array freigeben
Letzteres, denn das Array selber enthält ja nur nen Pointer auf deine Objekte und weiß ja nicht, dass es diese auch löschen soll.
|
Re: laufzeit-komponenten-array freigeben
mmmpf :(
na gut - dann muss ich das so freigeben trotzdem Danke :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 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