我们假设我有一个TList类的实例(BDS 2006,所以这是一个指针类型的列表).放入列表的每个指针引用New()函数分配的内存.所以当我想清除列表时,我必须遍历它并处理每个项目,对吧?但如何正确地做到这一点?我必须将每个处理的物品投放到实际的类型上吗?
@H_403_2@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()函数在获取一般的指针类型时,会如何知道要处理多少内存?
这是第二种方法(无类型铸造):
@H_403_2@for i := 0 to MyList.Count - 1 do Dispose(MyList[x]);如果有人向我解释如何做到这一点,为什么,我将不胜感激.非常感谢.