假设我们在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
或Exit
如果对于这些问题中的任何一个,答案是“否” - 一个后续问题 - 如果迭代器是一个类,它会改变吗?
答案 0 :(得分:2)
不是所有人。
与Delphi相同只是在响应接口引用计数为零时隐式调用析构函数。 (虽然那个界面可能是一个olevariant)。
TP对象是静态的,在FPC中,它们还尊重嵌套的自动化类型。但是析构函数需要被明确地称为
由于您的问题都不涉及界面使用,答案是否。