說我有一個類欄位
a : array of array of double;
它是使用嵌套的 SetLength 呼叫分配的。
SetLength(a,100);
for i := 0 to length(a)-1 do SetLength( a[i], 100 );
在物件銷毀上是否有必要回圈遍歷陣列的第一級以釋放它的第二級項?
for i := 0 to length(a)-1 do a[i] := NIL;
是否有必要或編譯器也處理多維動態陣列的釋放?
uj5u.com熱心網友回復:
動態陣列由編譯器管理。當動態陣列的參考計數降為零時,它會自動釋放。
這同樣適用于任何維度的多維動態陣列,在每個級別。
因此,當您的欄位a超出范圍時,此動態陣列的參考計數減一。如果新的參考計數為零,則釋放該陣列,因此所有元素a[0], a[1], ...的參考計數a[High(a)]減一。而且,如果它們達到零,它們也會被釋放。
你不需要做任何事情。
uj5u.com熱心網友回復:
您可以通過一次SetLength()呼叫設定多維動態陣列的大小。無需使用任何回圈。
您只需呼叫
SetLength(DynamicArray, FirstDimensionSize, SecondDimensionSize, ..NthDimensionSize).
因此,在您的情況下,您可以通過簡單地使用來設定動態陣列的初始大小:
SetLength(a,100,100);
然后在釋放陣列時,您只需呼叫:
SetLength(a,0,0);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/315614.html
