![]() |
TStringList mit Objekten: Free oder FreeAndNil?
In einer TStringList mit OwnsObjects: Werden mit FreeAndNil auch die Objekte der Listenelemente freigegeben, oder reicht dazu Free aus?
Delphi-Quellcode:
MyStringList := TStringList.Create;
MyStringList.OwnsObjects := True; try while DerTagLangIst do MyStringList.AddObject(AString, TMyObj.Create); finally //MyStringList.Free; FreeAndNil(MyStringList); // besser? end; |
Re: TStringList mit Objekten: Free oder FreeAndNil?
FreeAndNil() setzt zusätzlich zum aufruf von .Free() noch die Referenzvariable für die Stringliste auf Nil.
|
Re: TStringList mit Objekten: Free oder FreeAndNil?
Zitat:
Etwa so?:
Delphi-Quellcode:
MyStringList := TStringList.Create;
MyStringList.OwnsObjects := True; try while DerTagLangIst do MyStringList.AddObject(AString, TMyObj.Create); finally for i := 0 to MyStringList.Count - 1 do FreeAndNil(MyStringList.Objects[i]); //MyStringList.Free; FreeAndNil(MyStringList); // besser? end; |
Re: TStringList mit Objekten: Free oder FreeAndNil?
Mein Delphi 2007 kennt zwar noch kein OwnsObjects bei Stringlisten, aber ich mutmaße einmal, dass es sich so verhält wie bei einer TObjectlist, d.h. beim Freigeben der Liste werden auch die enthaltenen Objekte "entsorgt".
[edit] Um sicherzugehen kannst Du Dir doch einmal eine Testanwendung schreiben und ReportMemoryLeaksOnShutdown auf true setzen. Wenn ohne manuelle Freigabe keine Speicherlecks gemeldet werden, habe ich wohl recht. [/edit] |
Re: TStringList mit Objekten: Free oder FreeAndNil?
Zitat:
Delphi-Quellcode:
entspricht
FreeAndNil(MyStringList);
Delphi-Quellcode:
Damit sollte es klar sein, dass es für die Objekte in der StringList keinen Unterschied macht.
MyStringList.Free;
MyStringList := nil; //Das ist der einzige Unterschied Wie DeddyH schon vorgeschlagen hat: Probiere es aus, wobei ich vermute, dass die Objecte manuell freigegeben werden müssen. |
Re: TStringList mit Objekten: Free oder FreeAndNil?
Zitat:
|
Re: TStringList mit Objekten: Free oder FreeAndNil?
Meiner Erinnerung zufolge gibt die TStringList die Objekte nicht frei. Der Sinn hinter dem Objects-Konstrukt ist schlicht, dass man ein Dictionary aufbauen kann. Bei der TListBox z.B. finde ich es sehr nützlich, zu jedem Eintrag noch Nutzdaten hinterlegen zu können.
|
Re: TStringList mit Objekten: Free oder FreeAndNil?
Es geht aber um OwnsObjects.
|
Re: TStringList mit Objekten: Free oder FreeAndNil?
Oha. :oops: Immer diese neuen Delphi-Versionen. :mrgreen:
|
Re: TStringList mit Objekten: Free oder FreeAndNil?
Hallo PeterPanino,
Delphi-Quellcode:
(das wird so nicht funktionieren, weil sich Count bei jedem Schleifendurchlauf ändert.)
for i := 0 to MyStringList.Count - 1 do
FreeAndNil(MyStringList.Objects[i]); Sorry, das ist Blödsinn siehe Apollonius.
Delphi-Quellcode:
Bis bald Chemiker
for i := MyStringList.Count-1 downto 0 do
begin FreeAndNil(MyStringList.Objects[i]); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 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