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

时间:2017-11-09 04:34:10

标签: delphi exception-handling delphi-2010 try-finally

我继承了一个充满这样结构的大型代码库:

              try
                 DoWhatever;
              finally
              end;

有时候“DoWhatever”涉及一些摆弄控件,而且往往是数据库的一个帖子,并且在代码中有很多情况下finally块中有一些东西。

但我的理解是,如果在finally块中没有任何东西,那么整个尝试......最后的事情毫无意义。整个代码非常嘈杂,所以我假设它只是未来代码的占位符或以前代码的保留。 (代码中有许多占位符。)

我的理解是正确的还是在Delphi中有一些秘密的双诈唬反转尝试...最后我被忽略了? (这是Delphi 2010。)

1 个答案:

答案 0 :(得分:4)

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

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

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

要找出代码为什么显示无用的构造,请询问前一位作者,或检查提交历史。