Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TStringList AddObjects (https://www.delphipraxis.net/22158-tstringlist-addobjects.html)

sakura 13. Mai 2004 12:50

Re: TStringList AddObjects
 
Achtung :warn: TList gibt die Objekte nicht frei. Due wurden höchstens durch Deine Anwendung automatisch freigegeben, aber nicht durch TList. Wenn man Objekte in einer Liste halten will, dann sollte man auf TObjectList (Unit Contnrs) zurückgreifen, die kann Objekte auch automatisch freigeben.

...:cat:...

GuenterS 13. Mai 2004 13:09

Re: TStringList AddObjects
 
Zitat:

Zitat von MrSpock
Hallo DP Gemeinde,

ich habe gerade einmal einen Test gemacht und war über das Ergebnis überrascht, vielleicht deswegen, weil ich bisher etwas falsch verstanden habe? :stupid:

Ich habe zwei StringListen erzeugt. Anschließend erzeuge ich 1000 Objekte (TLabel) und weise sie mit AddObjects sowohl der StringList1 als auch der StringList2 zu. Anschließend lösche ich alle Objekte der StringList1 in dem ich explizit StringList1.Objects[i].Free für alle i's aufrufe. Wenn ich jetzt auf das Object über Stringlist2 zugreife, funktioniert das ohne Fehler! Ich dachte, dass die Objekte nur als Verweise gespeichert werden. Stimmt das nicht?



Eigentlich ist das zu erwarten, da du ja nur einen Verweis und nicht das Objekt in die StringListe Kopierst.

mit dem StringList1.Objects[i].Free zerstörst du das TLabel Objekt in deinem Fall. Damit zeigt der entsprechende Verweis von Stringlist2 natürlich auf ein nicht mehr existierendes Objekt.

MrSpock 13. Mai 2004 13:31

Re: TStringList AddObjects
 
Hallo GuenterS,

Zitat:

mit dem StringList1.Objects[i].Free zerstörst du das TLabel Objekt in deinem Fall. Damit zeigt der entsprechende Verweis von Stringlist2 natürlich auf ein nicht mehr existierendes Objekt.
Genau das war ja, was mich verwundert hat. Ich konnte eben trotzdem auf das eigentlich nicht mehr existierende Object über einen Verweis aus StringList2 zugreifen. Und genau das habe ich nicht erwartet!

kiar 13. Mai 2004 13:44

Re: TStringList AddObjects
 
@sakura, missverständnis :!:

im Onclose der Anwendung gebe ich die objecte frei, alle, erst dann lösche ich die instanz der Tlist.

oder ist es für mich noch zu früh :shock:

raik

sakura 13. Mai 2004 13:48

Re: TStringList AddObjects
 
Zitat:

Zitat von kiar
@sakura, missverständnis

missverständnis, yepp. Ich hatte nicht rausgelesen, daß Du die Objekte expliziet frei gibst. Aber ansonsten schaue Dir (schaut Euch) mal TObjectList an, die nimmt Euch da eine Menge Arbeit ab ;)

...:cat:...

SirThornberry 13. Mai 2004 13:53

Re: TStringList AddObjects
 
Hmm, mich würde das stören wenn bei Freigabe von TList auch die Objecte frei gegeben werden. Wenn ich beispielsweise in eine TList meine ganzen Buttons packe um diesen dann per schleife eigenschaften zu zuweisen, will ich doch nicht das nach freigeben von TList auch meine ganzen Buttons vom TForm verschwunden sind... Finds richtig das Tlist das nicht macht bzw Stringlist mit den Objects

kiar 13. Mai 2004 14:32

Re: TStringList AddObjects
 
was will uns der künstler damit sagen :shock: :?:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:21 Uhr.
Seite 2 von 2     12   

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