假设我们在 FreePascal 中有一个自定义迭代器作为对象:
{$MODE OBJFPC}
....
type TLuaTablesEnumerator = object
private
{...}
public
constructor Create( aState : PLua_State; aIndex : Integer );
destructor Destroy;
function MoveNext : Boolean;
function GetEnumerator : TLuaTablesEnumerator;
public
property Current : TLuaTable read FCurrent;
end;
是否有保证Destroy
将始终被调用?我尝试了基本案例,似乎是这样,尽管文档中没有提到它。
特别是 -Destroy
将始终被调用,即使在以下情况下:
- 我们正常退出循环
Break
我们使用or提前退出循环Exit
- 我们通过引发的异常退出循环
如果对这些问题中的任何一个问题的答案是“否”——一个后续问题——如果迭代器是一个类,它会改变吗?