在C ++和C#中使用try / catch的正确方法是什么?

时间:2012-10-19 15:51:04

标签: c# c++ exception-handling

  

可能重复:
  When and how should I use exception handling?

我已经看到程序员在C#中使用每个方法编写的“try {} catch(){}”块 C ++。 在C#中似乎很平常。但在C ++中它似乎模糊不清。 使用它们的正确方法是什么?

2 个答案:

答案 0 :(得分:9)

你应该只使用try / catch三次:

  1. 在应用程序的顶层,这样您就可以向用户显示一条友好的错误消息(并希望记录一些有用的信息,以便您以后解决问题)。

  2. 何时可以从异常中正确恢复(或者至少清理不再需要的资源)。

  3. 当您要对异常信息执行某些操作,然后冒出异常时。

  4. 除了这三种情况外,没有理由使用try / catch块。您应该让Exception冒泡到调用者,以便他们可以在需要时处理它。

答案 1 :(得分:6)

处理异常的意图应该推迟到可以完成某些事情的点,无论是通知用户,重新尝试还是其他什么。因此,在每个函数中捕获异常通常都是糟糕的设计。

正如Justin所说,你可能需要捕获并重新抛出异常来进行局部清理 - 这可以解释C#代码。

在C ++中,惯用方法是RAII,它使用确定性破坏来执行本地清理,并避免捕获处理程序,这些处理程序不能真正处理但只是重新抛出。