假设我们在 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
提前退出循环 - 我们通过引发异常退出循环
如果对这些问题中的任何一个的答案是“否”——后续问题——如果迭代器是一个类,它会改变吗?
最佳答案
全都说不。
与 Delphi 中相同,仅在接口(interface)引用计数变为零时隐式调用析构函数。 (尽管该接口(interface)可能是一个 olevariant)。
TP 对象是静态的,在 FPC 中它们还遵循嵌套的自动化类型。但析构函数仍然需要显式调用
由于您的问题都不涉及界面使用,所以答案是否。
关于delphi - 销毁迭代器中的调用保证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15988848/