C++程序设计语言--第十四章:异常处理
2011-11-14 21:34
120 查看
1、错误处理
一个函数检测到一个在局部无法处理的问题时,可以:
终止程序
返回一个表示错误的值
返回一个合法值,让程序处于某种非法状态
调用一个预先准备好的出现“错误”的情况下用的函数
但是各有不足,异常处理机制是在传统技术不充分、不优美和容易出错的时候,提供的一种替代它们的技术。异常处理机制可以看作是编译时的类型检查和歧义性控制机制在运行中的对应物。
异常处理机制是一种非局部的控制结构,基于堆栈回退,因此也可以看做是另一种返回机制。
2、异常
异常经常可以自然地形成一些族,这意味着可以借组继承来表示异常的结构。同时,一个异常可以同属两个组。
一个异常在抛出时将被复制,所以,处理器得到只是原始异常的一个副本。
派生异常可能被用于多于一个异常类型的处理器捕捉,在写try语句时需要注意处理器的排列顺序。
3、资源管理
处理资源申请和释放问题,可以利用带有构造函数和析构函数的类的对象。
利用局部对象管理资源的技术通常被说成是“资源申请即初始化”。这种技术依赖于构造函数和析构函数的性质,以及它们与异常处理的相互关系。
标准库提供了模板类auto_ptr,支持“资源申请即初始化”的技术。简言之,auto_ptr可以用指针去初始化,且能以与指针同样的方式间接访问,同时,在auto_ptr退出作用域时,被它所指的对象将被隐式地自动删除。
面对资源耗尽,程序员提供了两种风格的解决方案
唤醒:请求某个调用程序纠正问题,而后继续执行。
终止:结束当前计算并返回某个调用程序。
在c++里唤醒模型由函数调用机制支持,而终止模型由异常处理机制支持。
4、异常的描述
将可能抛出的异常作为函数声明的一部分 void f(int a) throw (x2,x3)
要覆盖一个具有异常描述的虚函数,这个函数所带的异常描述必须至少是与那个虚函数的异常描述一样受限。
设计良好的子系统常常将它的所有异常都从一个类派生出来。
通过将标准库异常std::bad_exception加入某个异常描述,来使unexpected()的行为修改为其他的能够接受的方式。
对未预期异常的响应由_unexpected_handler决定,它又是通过<exception>中的std::set_unexcepted()设置的。
一个函数检测到一个在局部无法处理的问题时,可以:
终止程序
返回一个表示错误的值
返回一个合法值,让程序处于某种非法状态
调用一个预先准备好的出现“错误”的情况下用的函数
但是各有不足,异常处理机制是在传统技术不充分、不优美和容易出错的时候,提供的一种替代它们的技术。异常处理机制可以看作是编译时的类型检查和歧义性控制机制在运行中的对应物。
异常处理机制是一种非局部的控制结构,基于堆栈回退,因此也可以看做是另一种返回机制。
2、异常
异常经常可以自然地形成一些族,这意味着可以借组继承来表示异常的结构。同时,一个异常可以同属两个组。
一个异常在抛出时将被复制,所以,处理器得到只是原始异常的一个副本。
派生异常可能被用于多于一个异常类型的处理器捕捉,在写try语句时需要注意处理器的排列顺序。
3、资源管理
处理资源申请和释放问题,可以利用带有构造函数和析构函数的类的对象。
利用局部对象管理资源的技术通常被说成是“资源申请即初始化”。这种技术依赖于构造函数和析构函数的性质,以及它们与异常处理的相互关系。
标准库提供了模板类auto_ptr,支持“资源申请即初始化”的技术。简言之,auto_ptr可以用指针去初始化,且能以与指针同样的方式间接访问,同时,在auto_ptr退出作用域时,被它所指的对象将被隐式地自动删除。
面对资源耗尽,程序员提供了两种风格的解决方案
唤醒:请求某个调用程序纠正问题,而后继续执行。
终止:结束当前计算并返回某个调用程序。
在c++里唤醒模型由函数调用机制支持,而终止模型由异常处理机制支持。
4、异常的描述
将可能抛出的异常作为函数声明的一部分 void f(int a) throw (x2,x3)
要覆盖一个具有异常描述的虚函数,这个函数所带的异常描述必须至少是与那个虚函数的异常描述一样受限。
设计良好的子系统常常将它的所有异常都从一个类派生出来。
通过将标准库异常std::bad_exception加入某个异常描述,来使unexpected()的行为修改为其他的能够接受的方式。
对未预期异常的响应由_unexpected_handler决定,它又是通过<exception>中的std::set_unexcepted()设置的。
相关文章推荐
- C++程序设计语言练习8.6 异常处理和递归的性能代价对比
- java 语言程序设计-李尊朝 第9章 异常处理 课后习题
- C++程序设计语言练习7.3 函数不定个数参数的写法和多参数处理接口
- Java语言程序设计-基础篇(九)异常处理
- C++语言基础 例程 异常处理的任务
- C、C++、Java语言中异常处理机制浅析
- C++语言基础 例程 异常处理的方法
- 程序设计语言的异常处理机制探讨
- 【语言-C++】Image - .exe 中的 0x0043a998 处有未经处理的异常: 0xC0000005: 读取位置 0x029d846c 时发生访问冲突
- C、C++、Java语言中异常处理机制浅析
- C++的异常处理之二:C++11的异常处理
- JAVA语言基础:异常的处理和I/O系统
- c++异常处理,异常声明,捕获异常
- 从零开始学C++之异常(一):C语言错误处理方法、C++异常处理方法(throw, try, catch)简介
- C++程序设计语言练习6.5
- C++:异常的处理
- [置顶]C++异常处理:try,catch,throw,finally的用法
- 【脚本语言系列】关于Python基础知识异常处理,你需要知道的事
- More.Effective.C++了解异常处理的系统开销
- c++初级 之 异常处理trycatchthrow