我们假设我有一个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]);
如果有人向我解释如何做到这一点,为什么,我将不胜感激.非常感谢.