假设我有一个 TList 类的实例(BDS 2006,因此这是指针类型列表)。 我放入列表中的每个指针都引用 New() 函数分配的内存。 因此,当我想要清除列表时,我必须遍历它并释放每个项目,对吗?但是如何正确地执行此操作?我是否需要将每个已释放的项转换为其实际类型?
type
TMyRec = record
Field1: string;
Field2: integer;
end;
PMyRec = ^TMyRec;
...
var
MyList: TList;
MyRecPointer: PMyRec;
begin
...
New(MyRecPointer);
...
MyList.Add(MyRecPointer);
...
for i := 0 to MyList.Count - 1 do
Dispose(PMyRec(MyList[x]));
MyList.Clear();
end;
请看最后的for循环。我将每个项目转换为PMyRec以释放内存。这是必要的吗?我知道Dispose()函数有一个指针参数,所以在这种情况下进行类型转换似乎很愚蠢,但我仍然不确定。因为当Dispose()函数接收到通用指针类型时,它如何知道要释放多少内存?这是另一种没有类型转换的方法:for i := 0 to MyList.Count - 1 do
Dispose(MyList[x]);
如果有人能够向我解释如何做以及为什么要这样做,我将不胜感激。非常感谢。