如果我调用一个Generics.Collections对象的GetEnumerator方法,当我完成它时,我需要显式释放枚举器吗?
Generics.Collections
GetEnumerator
dz6r00yl1#
是的,你确实需要释放枚举器。无论谁调用GetEnumerator,都拥有它返回的内容。当它是一个for/in循环时,编译器编写代码并确保枚举器对象被释放。当你调用它时,你的工作就是释放枚举器。这其实是一个很容易回答的问题,你只需创建一个调用GetEnumerator的程序,并在执行Free时失败,使用内存管理器的工具来检查对象是否泄漏。
for/in
Free
uses System.Generics.Collections; begin ReportMemoryLeaksOnShutdown := True; with TList<Integer>.Create do begin GetEnumerator; Free; end; end.
字符串这导致以下泄漏报告:发生了意外的内存泄漏。意外的小块泄漏是:
1条答案
按热度按时间dz6r00yl1#
是的,你确实需要释放枚举器。无论谁调用
GetEnumerator
,都拥有它返回的内容。当它是一个
for/in
循环时,编译器编写代码并确保枚举器对象被释放。当你调用它时,你的工作就是释放枚举器。这其实是一个很容易回答的问题,你只需创建一个调用
GetEnumerator
的程序,并在执行Free
时失败,使用内存管理器的工具来检查对象是否泄漏。字符串
这导致以下泄漏报告:
发生了意外的内存泄漏。意外的小块泄漏是: