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);
所有这些都具有相同的含义。
我正在使用 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);
所有这些都具有相同的含义。