在 Delphi 中,我应该释放 "array of array of" 变量吗?

In Delphi should I free "array of array of" variables?

假设我有一个 class 字段

a : array of array of double;

它是使用嵌套的 SetLength 调用分配的。

SetLength(a,100);
for i := 0 to length(a)-1 do SetLength( a[i], 100 );

在对象 Destroy 上是否需要循环遍历第一级数组以释放它的第二级项目?

for i := 0 to length(a)-1 do a[i] := NIL;

是否有必要,或者编译器也处理多维动态数组的释放?

Dynamic arrays 由编译器管理。当动态数组的引用计数降为零时,它会自动释放。

这同样适用于 multidimensional dynamic arrays 任何维度的每个级别。

因此,当您的字段 a 超出范围时,此动态数组的引用计数将减一。如果新的引用计数为零,则释放数组,因此所有元素 a[0]a[1]、...、a[High(a)] 的引用计数都减一。而且,同样,如果它们达到零,它们也会被释放。

您不需要做任何事情。

您可以通过单个 SetLength() 调用设置多维动态数组的大小。无需使用任何循环。

你只需调用 SetLength(DynamicArray, FirstDimensionSize, SecondDimensionSize, ..NthDimensionSize).

因此,在您的情况下,您可以通过简单地使用以下方法设置动态数组的初始大小:

SetLength(a,100,100);

然后在释放数组时,您只需调用:

SetLength(a,0,0);