【发布时间】:2011-12-16 12:57:51
【问题描述】:
假设我有一个 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() 函数有一个 Pointer 参数,所以在这种情况下强制转换似乎很愚蠢,但我仍然不确定。因为 Dispose() 函数在得到一个通用的 Pointer 类型时如何知道要释放多少内存??
这是第二种方法(没有类型转换):
for i := 0 to MyList.Count - 1 do
Dispose(MyList[x]);
如果有人向我解释应该如何完成以及为什么这样做,我将不胜感激。非常感谢。
【问题讨论】:
标签: delphi pointers casting dispose