4
如果我調用Generics.Collections
對象的GetEnumerator
方法,當我完成它時,是否需要顯式釋放枚舉器?是否有必要從通用容器管理TEnumerators的生命週期?
如果我調用Generics.Collections
對象的GetEnumerator
方法,當我完成它時,是否需要顯式釋放枚舉器?是否有必要從通用容器管理TEnumerators的生命週期?
是的你需要釋放枚舉器。誰撥打GetEnumerator
誰擁有它返回的內容。
當它是一個for/in
循環時,編譯器將寫入代碼並確保枚舉器對象被丟棄。當你稱呼它時,你的工作就是處理統計員。
這實際上是一個很容易回答的問題。簡單地創建一個程序,調用GetEnumerator
而不是Free
它。使用內存管理器的設施來檢查對象是否泄露。
uses
System.Generics.Collections;
begin
ReportMemoryLeaksOnShutdown := True;
with TList<Integer>.Create do
begin
GetEnumerator;
Free;
end;
end.
,這導致以下泄漏報告:發生
意外的內存泄漏。意想不到的小塊泄漏是:
- 13 - 20個字節:TList.TEnumerator X 1