如果我调用对象的GetEnumerator
方法Generics.Collections
,是否需要在完成后显式释放枚举器?
问问题
168 次
1 回答
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
于 2013-04-18T15:20:54.070 回答