2
在Delphi XE7中(我使用RAD Studio),我嘗試調試一個包內的代碼。我遇到了一個我無法解釋的奇怪情況。例如,我有一個類似如下(注:我知道一個函數,這個函數什麼也不做智能,請因爲我沒有在現實世界中使用它不糾正它。這只是一個虛擬函數說明我所面臨的問題。)爲什麼調試器在for-in循環中遍歷析構函數?
procedure TMyClass.DemoFunc();
var
pTest: TObjectList<TObject>;
pProperty: TObject;
begin
pTest := TObjectList<TObject>.Create;
for pProperty in pTest do
pProperty.ToString;
pTest.Free;
end;
當調試上面的代碼中,我注意到,調試上線
pProperty.ToString;
如果我嘗試跟蹤到上述線路進入,我跳到
destructor TObject.Destroy;
但是從我的角度來看,它完全不合邏輯,因爲pTest顯然是空的,所以上面的行不應該被調用。
有人能向我解釋這種奇怪的行爲?
注意我試圖調試的代碼是在Delphi包中,但函數是從C++項目調用的。
問候
它讓我感到困惑,Emba決定使用堆分配枚舉器來爲其基本集合。就好像開發人員不瞭解堆的成本影響。 –
所以這可能是一個使用for-to循環代替的有效理由? –
大部分沒關係。但是如果你在大型機器上執行嚴肅的多線程代碼,那麼內存管理器爭用可能是一個問題。 –