Bas*_*scy 2 delphi enumerator delphi-2007
我有一个从TCollection派生的集合,实现了GetEnumerator,所以我可以在类似的结构中使用它
for lElem in lCollection do
Run Code Online (Sandbox Code Playgroud)
枚举器派生自TObject,与Delphi提供的标准枚举器完全相同,因此没有所有者.
Delphi帮助提到,如果枚举器支持IDisposable,它将被处理掉,但这只适用于.NET.
我想知道的是,枚举器实例如何以及何时以及由谁被释放?
对于每个for-enum语句,编译器生成的代码大致对应于此伪代码:
enumerator := list.GetEnumerator;
try
while enumerator.MoveNext do
do something with enumerator.Current;
finally
enumerator.Free;
end;
Run Code Online (Sandbox Code Playgroud)
上面的代码是为实现为类实例的枚举器生成的.如果你的枚举器是作为接口实现的,那么最后一行不会调用.Free,只是减少接口引用计数,允许它被销毁.
| 归档时间: |
|
| 查看次数: |
454 次 |
| 最近记录: |