Exceptionally Bad: The Story on the Misuse of Exceptions and How to Do Better
2.32 MB
85 页
0 评论
语言 | 格式 | 评分 |
---|---|---|
英语 | .pdf | 3 |
摘要 | ||
The document discusses the misuse of exceptions in C++ and provides guidelines for their proper use. Exceptions should be reserved for rare, serious, and recoverable errors, such as memory corruption or exhaustion, rather than for frequent or minor issues. It emphasizes that exceptions are optimized based on the assumption that they are rare and should be used to handle situations where continuing normal execution could lead to data corruption or other damage. | ||
AI总结 | ||
### 总结
本文档《Exceptionally Bad: The Story on the Misuse of Exceptions and How to Do Better》主要探讨了C++中异常使用的误区以及如何更好地利用异常处理。以下是核心观点和关键信息的总结:
#### 1. **异常的正确使用**
- **异常应仅用于罕见、严重且难以恢复的错误**。例如:
- 内存损坏
- 内存耗尽
- 某些不可预见的系统错误
- **不应将异常用于普通错误处理或控制流**,如频繁发生的错误或可以通过返回码处理的情况。
#### 2. **常见错误**
- 将异常用于频繁发生的错误或正常业务逻辑。
- 过度依赖异常处理导致代码复杂化,且异常处理的性能成本较高(因为编译器通常基于“异常罕见”的假设进行优化)。
- 使用过多的异常类型,使得错误处理变得混乱。
#### 3. **最佳实践**
- **保持异常的稀release性**:根据Microsoft的建议,仅在事件非常罕见时才使用异常。
- **集中错误处理**:将异常处理与普通代码分离,避免在代码中过多地嵌入try-catch块。
- **优先使用返回码或其他机制**:对于频繁或非严重的错误,使用返回码或其他错误处理机制更为合适。
- **减少异常类型**:尽量少用异常类型,以简化错误处理逻辑。
#### 4. **设计原则**
- **异常应用于功能性/可恢复的错误**,而非无法恢复的错误(如内存损坏)。
- **栈展开和数据传递**:异常可以用于栈展开、错误日志记录和数据传递,但应尽量少用。
- **避免“推卸责任”模式**:即所有问题都通过异常传递给上层调用者,导致事务被完全回滚。
#### 5. **资源管理与示例**
- **RAII(资源获取即初始化)**:优先使用RAII模式管理资源,避免通过异常处理资源泄漏。
- **示例代码**:文档提供了多个在线示例,展示了如何避免不良的异常使用,并改用更好的设计方式。
#### 6. **总结**
- 异常是有力的工具,但只有在罕见、严重且不可忽视的情况下才应使用。
- 合理设计错误处理机制,避免滥用异常,确保代码的可维护性和性能。 |
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余
73 页请下载阅读 -
文档评分