C++异常处理深度解析:从基础到实践

5星 · 超过95%的资源 需积分: 10 6 下载量 63 浏览量 更新于2024-07-25 收藏 530KB PDF 举报
"C与C++中的异常处理深入解析,涵盖标准C++异常处理的语法和语义,以及Microsoft对异常处理的扩展。讨论包括new和delete操作时的异常处理,异常规格声明,异常安全,placement new和placement delete,以及C++异常与Visual C++ SEH的混合使用。书中通过实例剖析异常处理机制,并提供了相关的编程指导方针。" 在C++编程中,异常处理是一种处理程序运行时错误的方式,它允许程序员在代码的特定点捕获和处理可能出现的问题,而不是依赖于返回值或全局状态检查。标准C++的异常处理基于一种称为“try-catch”机制,它允许在可能出现异常的代码块(try块)周围放置一个捕获异常的代码段(catch块)。 1. 异常和标准C对它的支持:C语言本身并不直接支持异常处理,但C++引入了标准C++异常,这是一个强大的错误处理机制。C++标准库提供了一些函数,如`std::terminate()`和`std::uncaught_exception()`,用于在异常处理过程中进行控制。 2. C++中的new和delete操作的异常处理:当动态分配内存时,如果new操作符无法分配足够的内存,它会抛出一个`std::bad_alloc`异常。程序员应该在尝试分配内存的代码中包含适当的异常处理,以防止程序崩溃。同样,如果在对象构造期间抛出异常,delete操作符不会被调用,因此需要考虑对象清理。 3. 异常规格声明:异常规格是一种在函数声明中指定该函数可能抛出哪些类型的异常,或者承诺不抛出任何异常的方式。这有助于编译器优化代码,并为程序员提供关于函数行为的明确保证。 4. 异常安全:异常安全确保即使在异常发生时,程序仍然保持一致的状态。有三种级别的异常安全性:基本保证(函数总是完成其基本任务,即使抛出异常)、强烈保证(函数要么成功完成,要么不改变任何状态)和no-throw保证(函数承诺不抛出异常)。 5. placement new和placement delete:placement new允许在已经分配的内存上创建对象,而placement delete则用于销毁这些对象。这些操作在处理定制内存管理或在已知内存位置构造对象时特别有用。 6. C++异常与Visual C++ SEH的混合使用:在Windows平台上,Visual C++支持结构化异常处理(SEH),这是另一种异常处理机制。虽然C++的异常处理和SEH可以同时存在,但混合使用时需要谨慎,因为它们有不同的异常模型和处理流程。 理解和掌握C++中的异常处理是编写健壮、可维护代码的关键。书中的内容详细讲解了这些概念,并提供了实践指导,对于C++开发者来说是一份宝贵的参考资料。
2010-02-27 上传
C 与C++中的异常处理 Robert Schmidt 著 无情 译 目 录 1. 异常和标准C 对它的支持...............................................................................................2 2. Microsoft 对异常处理方法的扩展..............................................................................12 3. 标准C++异常处理的基本语法和语义..........................................................................27 4. 实例剖析EH....................................................................................................................33 5. C++的new 和delete 操作时的异常处理.....................................................................40 6. Microsoft 对于<new>的实现版本中的异常处理........................................................47 7. 部分构造及placement delete....................................................................................53 8. 自动删除,类属new 和delete、placement new 和placement delete ...............59 9. placement new 和placement delete,及处理构造函数抛出的异常....................68 10. 从私有子对象中产生的异常.........................................................................................74 11. 异常规格申明.................................................................................................................83 12. unexpected()的实现上固有的限制.............................................................................89 13. 异常安全.........................................................................................................................94 14. 模板安全.......................................................................................................................100 15. 模板安全(续)...........................................................................................................107 16. 指导方针.......................................................................................................................113 17. C++异常和Visual C++ SEH 的混合使用...................................................................120