![]() |
Allgemeine Frage zu Listen.
Hallo,
ich hätte mal eine allgemeine zu einer Tobjectlist. Wenn ich zu einer Liste Objekte hinzufüge (OwnsObjects ist true) und die Liste nachher mit Freeandnil wieder freigebe müsste er den Speicher doch eigentlich wieder Freigeben oder ? Die werden mir danach aber immer noch als Memleak angezeigt und der Destructor der Objekte wird auch nicht aufgerufen. Hat jemand eine Idee warum der Destructor nicht aufgerufen wird und es immer noch Speicherleaks gibt ? Gruß, ngott2 |
AW: Allgemeine Frage zu Listen.
Ich denke das ist eine Frage wo ein minimales Beispielprogramm (klein(st)es Programm wo dieser Fehler auftritt) nützlich wäre.
|
AW: Allgemeine Frage zu Listen.
Objekte, die du erzeugst, musst du auch wieder freigeben, unabhängig davon, ob du diese auch noch zusätzlich in einer Objektliste führst.
|
AW: Allgemeine Frage zu Listen.
Doch, das ist doch grade der Sinn einer TObjectList- Die Objekte gehören dieser Liste. Wenn die Liste zerstört wird, zerstört sie auch alle Objekte die ihr gehören.
Ist ja nicht anders wie bei einem Formular- Der gehören die darauf enthaltenen Komponenten auch. |
AW: Allgemeine Frage zu Listen.
Wenn es eigene Objecte sind, die der Liste hinzugefügt werden. Haben die einen destructor und wenn ja hast du das override dort vergessen?
|
AW: Allgemeine Frage zu Listen.
Stimmt, ich nehm alles zurück und behaupte das Gegenteil :oops:
Zitat:
|
AW: Allgemeine Frage zu Listen.
Moin...8-)
Zitat:
Folgende Ideen dazu: 1. Du überschreibst den Listeninhalt mit neuen Objekten. Dann wird das ursprüngliche Objekt nicht entfernt beim Zerstören der Liste. 2. Die Wahrscheinlichkeit geht gegen 0 das das FreeAndNil verantwotlich ist. Versuche mal nur Free. ...ansonsten kann man dir, wie schon gesagt, nur helfen mit ein wenig Quellcode. :P |
AW: Allgemeine Frage zu Listen.
Zitat:
Zitat:
Zitat:
|
AW: Allgemeine Frage zu Listen.
Minimalst sollte es so aussehen
Delphi-Quellcode:
TFoo = class
public destructor Destroy; override; end; destructor TFoo.Destroy; begin inherited; end; procedure Test; var LList : TObjectList<TFoo>; begin LList := TObjectList<TFoo>.Create; try LList.Add( TFoo.Create ); finally FreeAndNil( LList ); end; end; end; |
AW: Allgemeine Frage zu Listen.
:oops: Er geht doch in den Destructor.
Durch 2 Methoden bei uns im Code die einen fast identischen Namen haben habe ich an der Falschen Stelle debuggt. Somit ist das Problem nicht mehr vorhanden. Danke für eure Hilfe... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 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