Delphi 动态数组

Delphi dynamic array

我正在使用 Delphi 10.0 西雅图。

假设我有这样一条记录:

TmyRecord = record
  a,b : string;
  ar  : array of string
end;

还有一个像这样的变量:

v : array of TmyRecord;

和一些这样的代码:

SetLength(v,2);
SetLength(v[0].ar,3);
SetLength(v[1].ar,2);
SetLength(v[0].ar[0],10);
SetLength(v[0].ar[1],5);
SetLength(v[0].ar[2],7);
...
v[0].ar[0][0] := 'aaaa';
v[0].ar[0][1] := 'bbbb';
....
v[1].ar[1][0] := 'xxxx';

请问这样的说法:

SetLength(v,0);

释放所有占用的内存,还是我必须手动释放它?

动态数组内存由 Delphi 自动管理,并在超出范围时释放。

如果您需要尽快释放数组内存,您可以显式清除数组 v,这将自动释放所有内存,包括记录中 ar 成员占用的内存。

您无需执行任何其他操作。


Delphi中有几种清除动态数组的方法:

将数组长度设置为 0 是清除数组的一种方法。

SetLength(v,0);

您也可以通过将 v 数组设置为 nil

来清除它
v := nil;

或使用内在的 Finalize:

Finalize(v);

所有这些都具有相同的含义。