gpt4 book ai didi

delphi - 是否有必要管理通用容器中 TEnumerator 的生命周期?

转载 作者:行者123 更新时间:2023-12-03 15:22:13 25 4
gpt4 key购买 nike

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

最佳答案

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

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

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

uses
System.Generics.Collections;

begin
ReportMemoryLeaksOnShutdown := True;
with TList<Integer>.Create do
begin
GetEnumerator;
Free;
end;
end.

这会产生以下泄漏报告:

An unexpected memory leak has occurred. The unexpected small block leaks are:

  • 13 - 20 bytes: TList.TEnumerator x 1

关于delphi - 是否有必要管理通用容器中 TEnumerator 的生命周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16086867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com