释放类似于 TList<string>
, TList<Double>
, TList<Integer>
或者 TList<TMyRecord>
这样的通用列表,其中 TMyRecord
声明如下:
type
TMyRecord = record
MyString: string;
MyDouble: Double;
MyInteger: Integer;
end;
需要进行任何额外的工作吗,还是MyList.Free
就足够了?
释放类似于 TList<string>
, TList<Double>
, TList<Integer>
或者 TList<TMyRecord>
这样的通用列表,其中 TMyRecord
声明如下:
type
TMyRecord = record
MyString: string;
MyDouble: Double;
MyInteger: Integer;
end;
需要进行任何额外的工作吗,还是MyList.Free
就足够了?
摘要
MyList.Free
已足够。
详细回答
TList<T>
泛型容器拥有其内容。当您释放容器时,其内容也被处理。
现在,如果T
是非托管引用,即指针或类,则列表拥有该引用。它不拥有引用所指向的内容。因此,如果您有TList<TObject>
,添加了一些对象,然后释放列表,则会处理这些引用,但对象仍然存在。因此,为了解决这个问题,有一个TObjectList<T>
。该容器可以配置为同时拥有对象和引用,并在适当的时刻处理对象。
现在,在您的情况下,每个列表都包含值类型或托管类型。列表拥有这些对象,并在销毁时处理它们。因此,对于所有列表,只需要使用MyList.Free
。