C ++中的异常处理仅限于try / throw / catch。与Object Pascal,Java,C#和Python不同,即使在C ++ 11中,该finally
构造也尚未实现。
我已经看到很多有关“异常安全代码”的C ++文献。Lippman写道,异常安全代码是一个重要但高级而又困难的话题,超出了他的Primer的讨论范围-这似乎意味着安全代码不是C ++的基础。赫伯·萨特(Herb Sutter)在他的Exceptional C ++中为该主题投入了10章!
但是在我看来,如果finally
实现了该构造,尝试编写“异常安全代码”时遇到的许多问题都可以很好地解决,从而使程序员可以确保即使在发生异常的情况下也可以恢复程序到安全,稳定,无泄漏的状态,接近资源分配和潜在问题代码的地步。作为一个经验丰富的Delphi和C#程序员,我使用try ..最终像大多数使用这些语言的程序员一样,在我的代码中广泛地进行了阻塞。
考虑到C ++ 11中实现的所有“风声”,我惊讶地发现“最终”仍然不存在。
那么,为什么finally
从未在C ++中实现该构造呢?实际上,这不是一个很难理解或高级的概念,并且可以帮助程序员编写“异常安全代码”。
finally
在C ++中没有,为什么使用了异常处理技术?” 是有效的,并且是该网站的主题。我认为现有的答案很好地涵盖了这一点。将其变成“关于C ++设计人员不finally
值得包括的理由吗?”的讨论。和“应该finally
添加到C ++吗?” 并针对问题的评论进行讨论,每个答案都不符合此问答网站的模型。