在Delphi中我应该释放“数组的数组”变量吗?

kgz*_*kgz 3 arrays delphi multidimensional-array dynamic-arrays

假设我有一个类字段

a : array of array of double;
Run Code Online (Sandbox Code Playgroud)

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

SetLength(a,100);
for i := 0 to length(a)-1 do SetLength( a[i], 100 );
Run Code Online (Sandbox Code Playgroud)

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

for i := 0 to length(a)-1 do a[i] := NIL;
Run Code Online (Sandbox Code Playgroud)

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

And*_*and 5

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

对于任何维度、每个级别的多维动态数组来说,这同样适用。

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

你不需要做任何事情。