如果我调用GetEnumerator
对象的Generics.Collections
方法,我完成后需要明确释放枚举器吗?
答案 0 :(得分:8)
是的,您需要释放调查员。致电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