Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Aus einer generic TList richtig löschen (https://www.delphipraxis.net/189772-aus-einer-generic-tlist-richtig-loeschen.html)

Shark99 19. Jul 2016 18:50

Delphi-Version: XE5

Aus einer generic TList richtig löschen
 
Ich bin mir recht sicher, dass ich ein Element auch einer TList<t> so löschen muss, aber es ist besser ich frage bevor es Speicherleaks oder AV gibt.
Delphi-Quellcode:
  TDataItem = class
    Modified: int64;
    Data: string;

    Constructor Create(iModified: int64; sData: string);
  end;

var

  TestList: TList<TDataItem>;
  DataItem: TDateItem;
  i: Integer;
 
...

  TestList := TList<TDataItem>.Create;
 
  for i := 0 to 10 do
     TestList.Add(TDataItem.Create(i,'test'));
 
 DataItem := TestList[5];
 TestList.Delete(5);
 DataItem.Free; // nötig?
Ich hab noch zusätzliche Fragen zu List.Remove()

Wird beim Remove das Objekt automatisch befreit, oder muss ich es auch manuell mit Free tun?

Was ist wenn ich an Remove ein Objekt übergebe welches mehrmals in der Liste vorhanden ist. Wird da nur das erste gefundene gelöscht?

Muss ich um Remove zu verwenden beim Erstellen von TestList einen IComparer mit angeben?

Der schöne Günther 19. Jul 2016 18:59

AW: Aus einer generic TList richtig löschen
 
Da dein
Delphi-Quellcode:
TDataItem
ein Objekt ist und du der Meinung bist dass diese Objekte dieser Liste gehören und diese sich bitte um Freigabe und alles kümmern soll suchst du keine
Delphi-Quellcode:
TList<>
sondern eine
Delphi-Quellcode:
TObjectList<>

Shark99 19. Jul 2016 19:14

AW: Aus einer generic TList richtig löschen
 
Gibt es Vor/Nachteile zwischen TList<T> und TObjectList<T>?

DeddyH 19. Jul 2016 19:55

AW: Aus einer generic TList richtig löschen
 
TObjectList ist von TList abgeleitet und kümmert sich ggf. selbst um die Freigabe ihrer enthaltenen Objekte.

Shark99 19. Jul 2016 20:38

AW: Aus einer generic TList richtig löschen
 
d.h. bei TObjectList.Free wird bei allen Objekten der Liste auch ein Free ausgeführt?

DeddyH 19. Jul 2016 20:56

AW: Aus einer generic TList richtig löschen
 
Sofern OwnsObjects auf true steht (Standard), ja.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:19 Uhr.

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