Delphi动态数组

3
我是一名中文翻译助手,以下是翻译结果:

我正在使用Delphi 10.0 Seattle。

假设我有这样一个记录:

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);

释放所有占用的内存,还是需要手动释放?

1个回答

7
动态数组内存由Delphi自动管理,并在超出范围时释放。
如果您需要更早地释放数组内存,可以显式清除数组 v,这将自动释放所有内存,包括记录的 ar 成员占用的内存。
您不需要做其他事情。
有几种方法可以清除Delphi中的动态数组:
将数组长度设置为0是清除数组的一种方式。
SetLength(v,0);

您也可以通过将v数组设置为nil来清除它。
v := nil;

或者通过使用内在的Finalize方法:

Finalize(v);

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

通常情况下(例如,如果v是一个局部变量),我会通过不做任何操作(只需让其超出作用域)来清除它。 - Uli Gerhardt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接