一个空的 Try/Finally 块有什么用吗?

Is there any purpose for an empty Try/Finally block?

我继承了一个庞大的代码库,其中充满了这样的结构:

              try
                 DoWhatever;
              finally
              end;

有时 "DoWhatever" 涉及一些控件的摆弄,而且通常是 post 到数据库,并且在代码中有很多情况下 finally 块中有一些东西。

但我的理解是,如果 finally 块中什么都没有,那么整个 try...finally 就没有意义了。代码总体上非常嘈杂,所以我假设它只是未来代码的占位符或以前代码的保留。 (代码中有很多占位符。)

我的理解是否正确,或者在 Delphi try...finally 中是否存在我忽略的一些秘密双诈唬逆转? (这是 Delphi 2010 年。)

它没有 功能性 目的 — 它对程序的 运行 时间行为没有影响。当控制离开 try 部分时,程序将跳转到 finally 部分,什么都不做,然后继续执行下一条指令(根据控制如何到达 finally 语句),就好像 try-finally 块没有根本没去过那里。唯一的区别是程序在 try-finally 块之前和之后花费额外的时间来设置和清除堆栈中的控制结构。

可能是作者有一个包含 try-finally 块的模板,但该模板的某些实例最终不需要任何清理代码。让代码符合一致的模式可能会使某些自动化任务变得更容易。

try-finally 块还可以提供一个方便的位置来放置在受保护代码 运行 之后触发的断点,即使在发生异常或其他过早终止的情况下也是如此。

要找出为什么代码有如此明显无用的构造,请询问以前的作者,或检查提交历史。