C++异常处理的最佳实践是什么?
What are your best practices for C++ exception handling?
我搜索了互联网,找到了很多关于这个主题的文章。但是,我发现没有完整的清单来验证我们的代码的异常安全质量。
因此,我想从您那里收集有关C++异常处理的宝贵最佳实践。
我首先列出我自己的一些做法:
-
捕获析构函数中的所有异常(如果有):
struct A { ~A() { try { // Here may throw exceptions } catch (std::runtime_error& e) {} catch (...) { logging("..."); } } };
-
在异常信息中添加函数名称、源文件名和行号。
__func__
,__FILE__
和__LINE__
是好朋友。 -
切勿使用异常规范。原因在"C++编码标准"一书中给出。
你的是什么?
我知道这可能更适合作为评论而不是答案,但由于我链接的资源回答了您的所有问题以及更多问题,我认为也可以将其发布为答案,只是为了给它更多的可见性和/或相关性。
由于我不可能比原版更好地总结这一切,我甚至不会尝试做一个简短的总结,因为我冒着歪曲它或给出有偏见的概述的风险。
只需观看 Jon Kalb 关于异常安全编码的两部分演讲。就是这样。
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 派生类销毁的最佳实践是什么
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 在reactor中存储eventHandlers的最佳方式是什么
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 将一系列整数放入类的最佳方法是什么?
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 在nodejs中使用本机代码的最佳方法是什么?
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- 在 c++ 中解析数据包数据的最佳方法是什么?
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 在自定义 std::vector-like 容器中处理指针和非指针模板类型的最佳方法是什么?
- 在向量中查找大于 0(或通常为 k)的最小元素的最佳方法是什么?