可能重复:
我应该何时以及如何使用异常处理?
我已经看到程序员在 C# 和 C++的每个方法中都编写了“try{}catch(){}”块。在 C# 中,这似乎很常见。但在 C++ 中,它似乎晦涩难懂。使用它们的正确方法是什么?
可能重复:
我应该何时以及如何使用异常处理?
我已经看到程序员在 C# 和 C++的每个方法中都编写了“try{}catch(){}”块。在 C# 中,这似乎很常见。但在 C++ 中,它似乎晦涩难懂。使用它们的正确方法是什么?
实际上只有 3 次你应该使用 try/catch:
在应用程序的顶层,您可以向用户显示友好的错误消息(并希望记录一些有用的信息,以便以后解决问题)。
何时可以从异常中正确恢复(或至少清理不再需要的资源)。
当您要对异常信息执行某些操作时,然后将异常冒泡。
除了这三种情况,没有理由使用 try/catch 块。您应该让异常冒泡到调用者,以便他们可以在需要时处理它。
异常的目的是处理应该推迟到可以做一些有用的事情的时候,无论是通知用户、重试还是其他什么。因此,在每个函数中捕获异常通常是糟糕的设计。
正如贾斯汀所说,您可能需要捕获并重新引发异常以进行本地清理 - 这将解释 C# 代码。
在 C++ 中,惯用的方法是 RAII,它使用确定性破坏来执行本地清理,并避免捕获处理程序,这些处理程序不是真正处理但只是重新抛出。