我经常使用TList的扩展器:TList<SomeClass1>
,TList<SomeClass2>
等。
几乎每次都需要清空它们,删除它们存储的所有对象。
我是通过为每个特定的TList编写特定的过程来实现的。例如:
while Dirs.Count > 0 do
begin
Dirs.Items[0].Free;
Dirs.Delete(0);
end;
有没有办法对通用程序进行编码?像这样:
procedure EmptyAList(_List : TClass; _Object : TClass);
begin
_Object(_List.Items[0]).Free;
_List.Delete(0);
end;
或类似的任何东西。
答案 0 :(得分:7)
使用TObjectList<T>
代替TList<T>
。 TObjectList<T>
是TList<T>
后代,默认情况下拥有并销毁存储的对象。
您所要做的就是确保其OwnsObjects
属性为true(默认为默认值),然后您可以调用其Clear()
方法自动释放所有包含的对象。例如:
Dirs: TObjectList<SomeClass>;
...
Dirs.Add(SomeObject);
...
Dirs.Clear;