如何释放通用TList <t>?</t>

时间:2013-03-29 16:08:50

标签: delphi generics generic-list

释放通用列表,例如TList<string>TList<Double>TList<Integer>TList<TMyRecord>,其中TMyRecord被声明为:

type
  TMyRecord = record
    MyString: string;
    MyDouble: Double;
    MyInteger: Integer;
  end;

是否需要任何其他工作或MyList.Free是否足够?

1 个答案:

答案 0 :(得分:28)

执行摘要

MyList.Free就足够了。

详细答案

TList<T>通用容器拥有其内容。当您释放容器时,内容也会被丢弃。

现在,如果T是非托管引用(指针或类),则列表拥有引用。它不具有引用所指的内容。因此,如果您有TList<TObject>,添加一些对象,然后释放列表,则会丢弃引用,但对象仍然存在。所以,要处理这个问题,有TObjectList<T>。该容器可以配置为拥有对象和引用,因此在适当的时候处理对象。

现在,在您的方案中,每个列表都包含值类型或托管类型。该列表拥有这些对象,并在销毁时将其处置掉。因此,对于您的所有列表,只需MyList.Free即可。