Delphi 是否有必要从通用容器管理Tenumerator的寿命?

Delphi 是否有必要从通用容器管理Tenumerator的寿命?,delphi,Delphi,如果调用Generics.Collections对象的GetEnumerator方法,在使用完枚举器后是否需要显式释放它?是,您确实需要释放枚举器。调用GetEnumerator的人拥有它返回的内容 当它是for/in循环时,编译器编写代码并确保枚举器对象已被释放。当您调用它时,您的工作是处理枚举数 事实上,这是一个很容易回答的问题。只需创建一个调用GetEnumerator的程序,但无法释放它。使用内存管理器的工具检查对象是否泄漏 uses System.Generics.Collecti

如果调用
Generics.Collections
对象的
GetEnumerator
方法,在使用完枚举器后是否需要显式释放它?

是,您确实需要释放枚举器。调用
GetEnumerator
的人拥有它返回的内容

当它是
for/in
循环时,编译器编写代码并确保枚举器对象已被释放。当您调用它时,您的工作是处理枚举数

事实上,这是一个很容易回答的问题。只需创建一个调用
GetEnumerator
的程序,但无法
释放它。使用内存管理器的工具检查对象是否泄漏

uses
  System.Generics.Collections;

begin
  ReportMemoryLeaksOnShutdown := True;
  with TList<Integer>.Create do
  begin
    GetEnumerator;
    Free;
  end;
end.
使用
系统、泛型、集合;
开始
ReportMemoryLeaksOnShutdown:=True;
使用TList.createdo
开始
获取枚举器;
自由的
结束;
结束。
这将导致以下泄漏报告:

发生意外内存泄漏。意外的小块泄漏是:

  • 13-20字节:TList.TEnumerator x 1