2

假设我们在 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将始终被调用,即使在以下情况下:

  1. 我们正常退出循环
  2. Break我们使用or提前退出循环Exit
  3. 我们通过引发的异常退出循环

如果对这些问题中的任何一个问题的答案是“否”——一个后续问题——如果迭代器是一个类,它会改变吗?

4

1 回答 1

2

对所有都没有。

与 Delphi 中相同,仅在接口引用计数变为零时才隐式调用析构函数。(尽管该接口可能在 olevariant 中)。

TP 对象是静态的,在 FPC 中它们还尊重嵌套的自动化类型。但是析构函数仍然需要显式调用

由于您的问题均不涉及界面使用,因此答案是否定的。

于 2013-04-21T12:24:48.110 回答