pdf文档 Back to Basics: Exceptions

4.87 MB 111 页 0 评论
语言 格式 评分
英语
.pdf
3
摘要
文档讨论了异常处理(Exception Handling)的核心概念和最佳实践,包括异常的工作原理、异常安全性保证、如何编写异常安全代码以及重构非异常安全代码等。文档还探讨了异常处理的性能影响,指出异常处理可能导致二进制尺寸增加,并非零开销。未处理的异常会导致std::terminate() 调用,无栈展开,对象 destructor 未调用,潜在资源泄漏。文档通过代码示例展示了try-catch块的使用,并强调了异常处理的基本原则和注意事项。
AI总结
《Back to Basics: Exceptions》总结 本文档主要围绕C++异常处理的基础知识、工作原理及最佳实践展开,重点内容如下: ### 1. **异常的基本情况** - **异常的定义**:异常是用于处理意外情况的机制,常见于编程中“不应该 happen”的事件,例如空指针解引用、越界访问、释放后使用等。 - **异常处理的关键字**:`throw`(抛出)、`try`(尝试)、`catch`(捕获)。 - **栈展开(Stack Unwinding)**:异常被抛出时,栈上的对象会按逆序被销毁,资源可能泄漏。 - 未处理的异常会调用 `std::terminate()`,导致程序终止,不执行栈展开和析构函数。 ### 2. **异常的工作原理** - 异常的处理机制依赖于动态内存分配。 - 使用异常会增加二进制体积,性能上可能有额外开销,但不是零开销。 - 异常处理时,应通过常引用捕获,以避免不必要的对象拷贝和潜在的对象切割(slicing)。 ### 3. **异常的使用** - **何时使用异常**:适用于不可能预见或不应该发生的错误,例如流控制、错误处理等。 - **何时不使用异常**:避免用于正常的程序流程控制或可以通过其他方式处理的情况。 ### 4. **异常安全性** - **异常安全性保障**:确保在异常发生时,资源不泄漏,对象处于一致状态。 - **编写异常安全代码**:通过RAII(Resource Acquisition Is Initialization)模式确保资源管理。 - **重构非异常安全代码**:通过异常安全的设计原则(如强异常安全、基本异常安全)优化代码。 ### 5. **异常处理的最佳实践** - 笼统捕获异常(`catch(...)`)应谨慎使用。 - 在 `catch` 块中处理异常时,尽量采取行动,而非仅记录日志。 - 避免在构造函数或析构函数中抛出异常,防止资源泄漏。 ### 6. **性能与资源** - 异常处理的开销较大,但适度使用可以提升代码质量。 - 异常处理可能导致二进制体积增大,影响性能。 ### 总结 本文档系统地介绍了异常处理的核心概念、工作机制、使用场景及安全性保障。通过合理使用异常,可以让代码更健壮,避免资源泄漏和不一致状态,但需注意其性能开销和使用场景,确保异常处理的 hiệu quả和合理性。
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余 99 页请下载阅读 -
文档评分
请文明评论,理性发言.