New 和 Dispose 是在 Delphi 中用于动态分配和释放内存的两个关键字。
-
New 关键字:
New 关键字用于动态地分配内存以存储一个或多个对象。它的一般语法为:
New(PointerVariable);
其中,PointerVariable 是一个指向要分配内存的类型的指针。New 将分配足够的内存以存储指定类型的对象,并返回指向新分配内存的指针。
// 例子:分配一个整数的内存 varintPtr: PInteger; beginNew(intPtr);intPtr^ := 42; // 在分配的内存中存储整数值// 使用 intPtrDispose(intPtr); // 释放分配的内存 end;
-
Dispose 关键字:
Dispose 关键字用于释放通过 New 分配的内存。它的语法为:
Dispose(PointerVariable);
其中,PointerVariable 是通过 New 分配内存的指针。Dispose 将释放之前通过 New 分配的内存,并将指针设置为 nil。
// 例子:释放之前分配的整数内存 varintPtr: PInteger; beginNew(intPtr);intPtr^ := 42;// 使用 intPtrDispose(intPtr); // 释放分配的内存,并将 intPtr 设置为 nil end;
-
GetMem 关键字:
GetMem 过程用于动态地分配指定大小的内存块,并返回一个指向该内存块的指针。其基本语法如下:
GetMem(PointerVariable, SizeInBytes);
其中,PointerVariable 是一个指向分配内存的指针,SizeInBytes 是要分配的内存块的字节数。被分配的内存块是未初始化的。
// 例子:分配一个包含 10 个整数的内存块 varintArray: PInteger; beginGetMem(intArray, 10 * SizeOf(Integer));// 使用 intArray,注意此时内存块未初始化// ...FreeMem(intArray); // 释放分配的内存 end;
-
FreeMem 关键字:
FreeMem 过程用于释放通过 GetMem 分配的内存。其基本语法如下:FreeMem(PointerVariable);
其中,PointerVariable 是通过 GetMem 分配内存的指针。调用 FreeMem 会释放之前分配的内存,并将指针设置为 nil。
// 例子:释放之前分配的整数内存块 varintArray: PInteger; beginGetMem(intArray, 10 * SizeOf(Integer));// 使用 intArray// ...FreeMem(intArray); // 释放分配的内存,并将 intArray 设置为 nil end;
注意:在使用 FreeMem 释放内存后,要确保不再使用该指针,否则可能导致悬挂指针的问题。
那么着两种管理内存的方法有什么区别呢?