![]() |
Re: Listen freigeben
TObjectList hat einen Parameter im Konstruktor mit Namen OwnsObjects (default true). Wenn Du den nicht auf false setzt, werden alle enthaltenen Objekte beim Zerstören freigegeben, das gilt auch für enthaltene weitere TObjectLists und deren Objekte.
|
Re: Listen freigeben
Guten Morgen Viktorii,
für dein Problem, habe ich mal das Orakel befragt, es meinte für die Freigabe reicht: FreeAndNil(MyObjectList); damit wird jeweils die Methode .Free der allokierten aufgerufen und anschließend die Liste selbst zerstört. Falls deine Objekte wiederrum Objekte enthalten, so müssen diese im jeweiligen Destruktor freigegeben werden. Daher für deine Frage ein klares und eindeutiges Njan. Schöne Grüße Oreaden |
Re: Listen freigeben
@DeddyH: Okay, OwnsObjects habe ich auf true. Habe ich vergessen zu erwähnen.
Aber wer hat nun recht? DeddyH oder Oreaden bzw. das Orakel :?: |
Re: Listen freigeben
Probier' s doch mit FastMM aus ;)
|
Re: Listen freigeben
Zitat:
Das Orakel weist nur darauf hin, dass die TObjectList die enthaltenen TObject's beim TObjectList.Free auch mit TObject.Free aus dem Speicher wirft. Also wenn dieses Object an die TObjectList gehängt wird, dann ist beim TObjectList.Free alles aus dem Speicher.
Delphi-Quellcode:
Bei diesem Object funktioniert das nicht, was aber nicht an der Liste, sondern an dem Object selber liegt, denn das entfernt sich nicht sauber aus dem Speicher!
TMyObject = class( TObject )
private FEinObject : TObject; public constructor Create; destructor Destroy; override; end; constructor Create; begin inherited; FEinObject := TObject.Create; end; destructor Destroy; begin FEinObject.Free; inherited Destroy; end;
Delphi-Quellcode:
DIe TObjectList macht schon alles richtig, sie kann aber nicht zaubern!
TMyObject = class( TObject )
private FEinObject : TObject; public constructor Create; end; constructor Create; begin inherited; FEinObject := TObject.Create; end; cu Oliver |
Re: Listen freigeben
:firejump: :firejump: Ein Schelm, wer dem Orakel nicht traut. Für die ungläubigen unter den Delphianern hier ein Testcode, möge jeder selbst seine Augen öffnen.
Delphi-Quellcode:
PROGRAM Project1;
{$APPTYPE CONSOLE} USES SysUtils, Contnrs; TYPE test = CLASS c: PChar; END; tTestList = CLASS(TObjectList) x: test; CONSTRUCTOR Create; // Destructor Destroy; override; END; CONSTRUCTOR tTestList.Create; BEGIN x := test.Create; END; //destructor tTestList.Destroy; //begin // x.Free; // inherited; //end; VAR x: tTestList; BEGIN ReportMemoryLeaksOnShutdown := True; x := tTestlist.Create; x.Free; END. |
Re: Listen freigeben
Ein Blick in die Contnrs.pas bringt Folgendes zu Tage:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 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