如何释放通用TList <T>?

27 delphi generics generic-list

是否释放泛型列表一样TList<string>,TList<Double>,TList<Integer>或者TList<TMyRecord>,其中,TMyRecord声明如下:

type
  TMyRecord = record
    MyString: string;
    MyDouble: Double;
    MyInteger: Integer;
  end;
Run Code Online (Sandbox Code Playgroud)

需要任何额外的工作还是MyList.Free足够的?

Dav*_*nan 29

执行摘要

MyList.Free 足够了.

详细的答案

TList<T>一般的容器拥有它的内容.当您释放容器时,内容也会被丢弃.

现在,如果T是非托管引用,无论是指针还是类,则列表拥有引用.它不具有引用所指的内容.因此,如果你有TList<TObject>,添加一些对象,然后释放列表,引用将被处理,但对象仍然存在.所以,要解决这个问题TObjectList<T>.该容器可以配置为拥有对象和引用,因此在适当的时候处理对象.

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