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 TList - Fragen zur Speicherverwaltung (https://www.delphipraxis.net/127383-tlist-fragen-zur-speicherverwaltung.html)

generic 12. Jan 2009 16:25

Re: TList - Fragen zur Speicherverwaltung
 
Was speicherst du in der TList?

Wenn es Objekte sind solltest du lieber TObjectList nehmen.
Diese kann auch die Objekte wieder freigeben.

s.H. Constructor -> owns muss auf true sein.

Sir Rufo 12. Jan 2009 16:29

Re: TList - Fragen zur Speicherverwaltung
 
Ich kann den Antwortern eigentlich nur bedingt zustimmen.

Das Freigeben der Objekte in der TList muss man abhängig von dem Objekt machen, an dem TList hängt.
Ist TList in einer Klasse definiert, dann TList aufräumen, wenn diese Klasse sich gerade in Rauch auflöst, wäre wie hier schon richtig angegeben im OnDestroy des Forms.
Ist TList aber als Variable in der Unit definiert, dann sollte die Freigabe im Abschnitt finalization erfolgen.

Objekte in einer (wie hier verwendeten) TList müssen beim Beenden nicht zwangsläufig manuell aus dem Speicher entfernt werden.

Bei einigen Klassen kann ich ja beim Erzeugen auch einen Owner mitgeben TIdFTP.Create( AOwner : TComponent ). Habe ich dieses gemacht, so wird dieses erzeugte Objekt beim Entfernen von Owner auch automatisch aus dem Speicher geschmissen.

Zitat:

Zitat von sirius
2. Den Speicher gibst du einfach frei, wenn TList.Free (also in Destroy) aufgerufen wird.

aber auch nur die TList selber und nicht die angehängten Objekte!

cu

Oliver

sirius 12. Jan 2009 16:48

Re: TList - Fragen zur Speicherverwaltung
 
Zitat:

Zitat von Sir Rufo
aber auch nur die TList selber und nicht die angehängten Objekte!

Deswegen schrieb ich ja, in Destroy

Sir Rufo 12. Jan 2009 16:54

Re: TList - Fragen zur Speicherverwaltung
 
Zitat:

Zitat von sirius
Zitat:

Zitat von Sir Rufo
aber auch nur die TList selber und nicht die angehängten Objekte!

Deswegen schrieb ich ja, in Destroy

... ich meinte mit TList.Free wird nur TList freigegeben - Punkt, aus. Alles was ich vorher an TList gehängt habe ist weiterhin im Speicher.
Das Freigeben von angehängten Objekte kann nur TObjectList.

sirius 12. Jan 2009 16:59

Re: TList - Fragen zur Speicherverwaltung
 
Ich sehe, wir meinen das gleiche.
Deswegen muss man es (alles angehängte) ja in Destroy freigeben.

DeddyH 12. Jan 2009 17:02

Re: TList - Fragen zur Speicherverwaltung
 
Ich glaube, Sir Rufo hat den Satz
Zitat:

Den Speicher gibst du einfach frei, wenn TList.Free (also in Destroy) aufgerufen wird.
nur falsch interpretiert. Sagen wir also einfach, dass vor dem Free die enthaltenen Daten freigegeben werden müssen :zwinker:.

LeoDD 13. Jan 2009 09:14

Re: TList - Fragen zur Speicherverwaltung
 
Zitat:

Zitat von generic
Was speicherst du in der TList?

Wenn es Objekte sind solltest du lieber TObjectList nehmen.
Diese kann auch die Objekte wieder freigeben.

s.H. Constructor -> owns muss auf true sein.

Es sind Zeiger auf Records, keine Objekte.

Ich hab überlegt, Objekte zu nehmen, habe aber keine Lust auf Typecastings.

sirius 13. Jan 2009 10:11

Re: TList - Fragen zur Speicherverwaltung
 
Bei records musst du doch auch von einem Pointer auf ein PRecord casten :gruebel:

Ich würde lieber gleich Klassen nehmen. Erstens hast du dann den Vorteil von TObjectlist. Zweitens kannst du dann jederzeit noch Methoden ergänzen, oder gar eine Ableitung deiner ersten Klasse speichern.


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