Clear a TList or a TObjectList
delphi, delphi-2007, tlist
Solution
1. TList won't free the elements, with both `Clear` or `Free`.
aList.Clear;
Will just set `aList.Count := 0` without freeing the `aList.Items[]` elements. So you'll leak memory. You'll need an explicit free as such:
for i := 0 to aList.Count-1 do
TObject(aList[i]).Free;
But this is what `TObjectList` does... :)
About `TObjectList`, it is worth saying that `TObjectList.Destroy` is calling `Clear`.
So
aObjectList.Clear;
aObjectList.Free;
is exactly the same as
aObjectList.Free;
2. To store a list of records, you can use a dynamic array.
You'll get all `TList` methods (and more) with our dynamic array wrapper. That is, `Add / Delete / Clear / Count / IndexOf / Find`...
It has built-in serialization features (in binary or JSON), automated sorting and comparison (using RTTI) which are not existing with a `TList/TObjectList`. From Delphi 5 and later.
With more modern version of Delphi, you may use generics to handle the dynamic array, if you do not want to use a third-party library.
Problem
I'm a bit puzzled of what to use for storing objects in a list. Until now I have used `TList` and freed each item in a loop. Then I discovered `TObjectList` that do this automatically from `Free`. Then I saw this from the doc of `TList.Clear`: Call `Clear` to empty the Items array and set the `Count` to 0. `Clear` also frees the memory used to store the `Items` array and sets the `Capacity` to 0. So it is basically the same. So for `TList` ``` mylist.Clear; myList.Free; ``` is the same as for `TObjectList`? ``` myList.Free; ``` Can `TObjectList` only be used for items as classes or can I store records?