在 C++ 和 C# 中使用 try/catch 的正确方法是什么?
What's the right way to use try/catch in C++ and C#?
可能的重复:
我何时以及如何使用异常处理?
我已经看到程序员具有" try {} catch(){}"块,用 c#和c#和C 。在C#中,这似乎是通常的。但是在C 中,这似乎晦涩难懂。使用它们的正确方法是什么?
实际上只有三次应该使用try/catch:
-
在您的应用程序的最高级别上,因此您可以向用户提供友好的错误消息(希望记录一些有用的信息,以便稍后可以解决问题)。
-
当您可以从异常中正确恢复(或至少清理不再需要的资源)。
-
当您要使用异常信息做某事时,然后将异常起泡。
除了这三种情况外,没有理由使用尝试/捕获块。您应该让异常泡泡到呼叫者,以便在需要时可以处理。
意图 应该将操作推迟到可以做有用的某些程度,无论是通知用户,重新尝试还是其他任何事情。因此,在中捕获例外,每个功能通常都是差的。
正如贾斯汀(Justin)所说,您可能需要捕获并重新刷新一个例外来进行本地清理 - 这将解释C#代码。
在C 中,惯用方法是RAII,而是使用确定性的破坏来执行本地清理,并避免了捕获的处理程序,这些处理程序不会真正实现,但div。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 有什么方法可以从Visual Studio 2017中的Catch C++测试中获取代码覆盖率指标?
- 构造函数中的异常:init() 方法、指针、大型 try/catch 或
- 在 C++ 和 C# 中使用 try/catch 的正确方法是什么?
- "Catch"通过发送消息方法发送的所有消息
- C++嵌套方法try-catch(实践)
- 是否有一种方法可以使编译器在catch子句中自动命中语句(断点)
- 在c++中使用try和catch方法创建一个函数来获取用户名