gpt4 book ai didi

delphi - 用 for in construction 创建的 Enumerator 是如何被销毁的?

转载 作者:行者123 更新时间:2023-12-03 18:17:05 25 4
gpt4 key购买 nike

我有一个派生自 TCollection 的集合,实现了 GetEnumerator,所以我可以在类似这样的结构中使用它

for lElem in lCollection do

枚举器派生自 TObject,与 Delphi 提供的标准枚举器完全一样,因此没有所有者。

Delphi 帮助中提到,如果枚举器支持 IDisposable,它将被丢弃,但这当然仅适用于 .NET。

我想知道的是,枚举器实例是如何、何时以及由谁释放的?

最佳答案

对于每个 for-enum 语句,编译器生成的代码大致对应于此伪代码:

enumerator := list.GetEnumerator;
try
while enumerator.MoveNext do
do something with enumerator.Current;
finally
enumerator.Free;
end;

上面的代码是为作为类实例实现的枚举器生成的。如果您的枚举器是作为接口(interface)实现的,那么最后一行将不会调用 .Free,而只是减少接口(interface)引用计数以允许它被销毁。

关于delphi - 用 for in construction 创建的 Enumerator 是如何被销毁的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5039306/

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