C++中的异常
来源:互联网 发布:sql 某字段相等的数量 编辑:程序博客网 时间:2024/05/19 09:14
一、异常术语
try 捕获异常,即用来捕获模块中的异常
catch 处理异常,处理try到的异常
throw 抛出异常
swallow 吞掉异常,在catch中处理了try到的异常,而没有再抛出其他异常。
propagate 传播异常,在catch中又抛出异常。
二、构造函数中的异常
当构造函数抛出异常时,由于对象尚未构造完成,因此析构函数并不会调用。此时,自动变量的内存可以被释放,但是动态分配的内存需要手工释放。有以下两种释放方法:
1. 通过显示delete/free释放
例如:
2. 使用智能指针来管理动态分配的内存
例如:
三、析构函数中的异常
尽管编译器允许在析构函数中抛出异常,但我们绝不要在析构函数中抛出异常。这是因为,当析构函数抛出异常时,此时还存在另外一个未被处理的异常,那么会调用terminate函数而终止程序(terminate函数最终会触发abort函数)。
四、异常规范(Exception Specification)
异常规范描述了某个函数可能会抛出的异常类型,不允许该函数抛出异常规范类型以外的异常。
例如声明一个只能抛出string和int类型异常的函数exceptionFun:
若exceptionFun抛出了其他类型的异常,那么会调用unexcepted函数(unexcepted函数最终会触发abort函数)。
此外,异常规范并没有改变函数的签名,因此不会影响函数的重载。
五、覆盖terminate函数
通过set_terminate(FUNC)函数可以实现自己的terminate函数,其中FUNC为自己实现的函数。
六、栈展开(Stack Unwinding)
栈展开是处理异常的一个过程,在这个过程中会调用从捕获异常到处理异常之间的所有局部对象。
- c#中的异常处理
- Objective-C中的异常
- C语言中的异常
- objective-c中的异常处理
- C语言中的异常处理
- C语言中的异常处理
- C语言中的异常处理
- C语言中的异常处理
- C语言中的异常处理
- C语言中的异常处理
- C语言中的异常处理
- C与C++中的异常处理
- C与C++中的异常处理3
- C与C++中的异常处理4
- C与C++中的异常处理5
- C与C++中的异常处理6
- C与C++中的异常处理7
- C与C++中的异常处理8
- JAVA中控制double类型小数点后位数的方法
- 堆和栈的区别(一)
- Windows XP/2003 系统调用(二)
- 以post方式发送链接请求的javascript函数
- Linux 下的串口编程
- C++中的异常
- expr 命令
- 堆与栈的区别(二)
- javascript 调用后台函数(转)
- 常用struts标签使用举例
- 各位朋友对" JavaScript挑战赛--随机颜色"的挑战代码
- 与时间,空间无关...........
- 房产税与租金关系
- Ibatis代码自动生成工具——Abator安装与应用实例(图解)