delphi - 销毁迭代器中的调用保证

标签 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. 我们通过引发异常退出循环

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

最佳答案

全都说不。

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

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

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

关于delphi - 销毁迭代器中的调用保证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15988848/

相关文章:

c++ - 存储指向固定大小 vector 内的元素的指针

pascal - TAChart Fit系列的贴合度

forms - 在 RAD studio 2010 中切换表单/单元 View (F12 键)

c++ - c++ 中没有 std::tuple 的 std::iterator 有什么原因吗?

delphi - 我在这里造成内存泄漏吗?

c++ - 如何使用迭代器填充未知大小的 vector ?

winapi - 获取鼠标光标下的像素颜色 - 快速方式

delphi - Indy 9 与 Lazarus/Free Pascal 兼容吗

delphi - 将对象列表保存在文本文件中

multithreading - 两个(非主)线程同步