清空陣列時,是否應該注意以下替代方案之間的區別?
假設arr是TArray<string>:
SetLength(arr, 0);
或者
arr := [];
我猜它們是一樣的,但我的 Delphi 有點生疏了,我似乎記得在幾個月前看似有效的代碼之后,微妙的“特性”又回來困擾著我......
uj5u.com熱心網友回復:
如果arr是動態陣列變數,則
SetLength(arr, 0)
和
arr := nil
和新的(德爾福 XE7 )
arr := []
都是等價的。
理解這種等價性的關鍵是SetLength檔案中的以下部分:
在呼叫
SetLength, 后S保證參考一個唯一的字串或陣列——即參考計數為 1 的字串或陣列。
另外,請回想一下,空動態陣列由指標表示nil,而不是指向“長度為零的動態陣列堆物件”的指標:
當變數為空(未初始化)或持有零長度陣列時,指標為空
nil且沒有動態記憶體與變數關聯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/509902.html
標籤:德尔福
