是否有必要从通用容器管理TEnumerators的生命周期?

时间:2013-04-18 15:19:41

标签: delphi

如果我调用GetEnumerator对象的Generics.Collections方法,我完成后需要明确释放枚举器吗?

1 个答案:

答案 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
  •