在迭代器中销毁调用保证

时间:2013-04-13 14:27:49

标签: delphi iterator freepascal

假设我们在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. 我们使用BreakExit
  3. 过早退出循环
  4. 我们通过引发的异常
  5. 退出循环

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

1 个答案:

答案 0 :(得分:2)

不是所有人。

与Delphi相同只是在响应接口引用计数为零时隐式调用析构函数。 (虽然那个界面可能是一个olevariant)。

TP对象是静态的,在FPC中,它们还尊重嵌套的自动化类型。但是析构函数需要被明确地称为

由于您的问题都不涉及界面使用,答案是