我已经看到程序员在C#中使用每个方法编写的“try {} catch(){}”块 C ++。 在C#中似乎很平常。但在C ++中它似乎模糊不清。 使用它们的正确方法是什么?
答案 0 :(得分:9)
你应该只使用try / catch三次:
在应用程序的顶层,这样您就可以向用户显示一条友好的错误消息(并希望记录一些有用的信息,以便您以后解决问题)。
何时可以从异常中正确恢复(或者至少清理不再需要的资源)。
当您要对异常信息执行某些操作,然后冒出异常时。
除了这三种情况外,没有理由使用try / catch块。您应该让Exception冒泡到调用者,以便他们可以在需要时处理它。
答案 1 :(得分:6)
处理异常的意图应该推迟到可以完成某些事情的点,无论是通知用户,重新尝试还是其他什么。因此,在每个函数中捕获异常通常都是糟糕的设计。
正如Justin所说,你可能需要捕获并重新抛出异常来进行局部清理 - 这可以解释C#代码。
在C ++中,惯用方法是RAII,它使用确定性破坏来执行本地清理,并避免捕获处理程序,这些处理程序不能真正处理但只是重新抛出。