如果我调用GetEnumerator一个Generics.Collections对象的方法,那么当我完成它时,是否需要显式释放枚举器?
是的,你需要释放调查员.无论谁打电话都GetEnumerator拥有它返回的东西.
当它是for/in循环时,编译器会编写代码并确保处理枚举器对象.当你打电话给它时,处理枚举器是你的工作.
事实上,这是一个非常容易回答的问题.只需创建一个调用GetEnumerator并失败的程序Free.使用内存管理器的工具来检查对象是否泄漏.
uses
System.Generics.Collections;
begin
ReportMemoryLeaksOnShutdown := True;
with TList<Integer>.Create do
begin
GetEnumerator;
Free;
end;
end.
Run Code Online (Sandbox Code Playgroud)
这导致以下泄漏报告:
发生意外的内存泄漏.意外的小块泄漏是:
- 13 - 20字节:TList.TEnumerator x 1
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |