0

我经常使用 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;

或任何类似的东西。

4

1 回答 1

7

使用TObjectList<T>而不是TList<T>. TObjectList<T>TList<T>默认拥有和销毁存储对象的后代。

您所要做的就是确保它的OwnsObjects属性为 true(默认情况下为 true),然后您可以调用它的Clear()方法来自动释放所有包含的对象。例如:

Dirs: TObjectList<SomeClass>;
...
Dirs.Add(SomeObject);
...
Dirs.Clear;

TObjectList<T>文件

于 2015-03-17T18:37:09.903 回答