C++中的异常浅析
2016-04-06 20:29
381 查看
我们都知道,无论是在C语言中还是C++的编程调试中,我们都会遇到各种各样的错误,那么在遇到这些错误的时候我们要怎么处理它们呢?
这里有一些传统的处理错误的方法:
①终止错误
②返回错误码
③返回合法值,让程序处于某种错误状态,
④调用一个预先设置好的处理错误的函数--->(回调函数)
为了更好地处理这一类问题,在C++中提出了异常,当函数出现一个自己无法处理的错误时,就会抛出异常,让函数的调用者直接或间接的来处理这个问题。
来举一个例子:
例1:
![](http://s4.51cto.com/wyfs02/M00/7E/97/wKioL1cFAMyijsWDAACCC2_kWpg925.png)
对于函数div来说,程序没有一种机制来处理当num2为零时的情况,所以我们可以通过抛出异常来解决这个问题
![](/e/u261/themes/default/images/spacer.gif)
注意:当throw出异常的时候,后面括号里的参数一定要和catch后面括号里的数据类型匹配
例2:下面再来举一个例子
![](http://s1.51cto.com/wyfs02/M00/7E/9A/wKiom1cE_9vDZ9UXAACiCZpEmLM444.png)
![](/e/u261/themes/default/images/spacer.gif)
从上面的代码可以看出,由于一旦抛出异常,就要进行捕获,所以在抛出异常的同时也不可避免的影响了代码的执行流,也就是代码不一定就顺序执行了,因此在抛出异常之前,如果有malloc或new开辟的空间时,一定要在执行流改变之前将其释放,否则就会出现内存泄漏的问题。
通过以上两个例子,我想大家一定能够对异常有一定的了解了吧,下面我来对异常做几点总结:
①异常是通过抛出对象引发的,该对象的类型取决了激活哪一类的异常
②被选中的异常处理代码是调用链中抛出对象类型相同的最近一个开始的
③抛出异常会释放局部存储对象,被抛出的对象也还给了系统,异常对象在catch处理后也还给了系统
Tips:
异常捕获的匹配规则
1.允许非const到const的转换,也就是const可以接受匹配非const
2.允许派生类型到基类的转换(父类的指针或引用可以指向或引用一个子类,将其作为接受的类型)
3.将数组转换为一个指向数组类型的指针,将函数转换为函数指针类型
注意事项
一般不要在析构函数或构造函数中抛出异常
这里有一些传统的处理错误的方法:
①终止错误
②返回错误码
③返回合法值,让程序处于某种错误状态,
④调用一个预先设置好的处理错误的函数--->(回调函数)
为了更好地处理这一类问题,在C++中提出了异常,当函数出现一个自己无法处理的错误时,就会抛出异常,让函数的调用者直接或间接的来处理这个问题。
来举一个例子:
例1:
![](http://s4.51cto.com/wyfs02/M00/7E/97/wKioL1cFAMyijsWDAACCC2_kWpg925.png)
对于函数div来说,程序没有一种机制来处理当num2为零时的情况,所以我们可以通过抛出异常来解决这个问题
![](/e/u261/themes/default/images/spacer.gif)
注意:当throw出异常的时候,后面括号里的参数一定要和catch后面括号里的数据类型匹配
例2:下面再来举一个例子
![](http://s1.51cto.com/wyfs02/M00/7E/9A/wKiom1cE_9vDZ9UXAACiCZpEmLM444.png)
![](/e/u261/themes/default/images/spacer.gif)
从上面的代码可以看出,由于一旦抛出异常,就要进行捕获,所以在抛出异常的同时也不可避免的影响了代码的执行流,也就是代码不一定就顺序执行了,因此在抛出异常之前,如果有malloc或new开辟的空间时,一定要在执行流改变之前将其释放,否则就会出现内存泄漏的问题。
通过以上两个例子,我想大家一定能够对异常有一定的了解了吧,下面我来对异常做几点总结:
①异常是通过抛出对象引发的,该对象的类型取决了激活哪一类的异常
②被选中的异常处理代码是调用链中抛出对象类型相同的最近一个开始的
③抛出异常会释放局部存储对象,被抛出的对象也还给了系统,异常对象在catch处理后也还给了系统
Tips:
异常捕获的匹配规则
1.允许非const到const的转换,也就是const可以接受匹配非const
2.允许派生类型到基类的转换(父类的指针或引用可以指向或引用一个子类,将其作为接受的类型)
3.将数组转换为一个指向数组类型的指针,将函数转换为函数指针类型
注意事项
一般不要在析构函数或构造函数中抛出异常
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- [Android]在代码里运行另一个程序的方法
- 如何写好 C main 函数
- DB2编程序技巧(1)
- DB2编程序技巧 (四)
- DB2编程序技巧 (六)
- DB2编程序技巧 (三)
- DB2编程序技巧 (九)
- DB2编程序技巧 (七)
- DB2编程序小小技巧
- DB2编程序技巧 (五)
- 空间两大拓展功能 引爆企业发展需求
- 空间支持多子网站 有效降低建站成本
- 奔月互联免费50m/5g/asp/ftp/可绑米空间
- 三维免费空间提供多款免费ASP空间(1G)
- 二级域名原理以及程序
- DB2编程序技巧 (一)
- DB2编程序技巧 (八)
- DB2编程序技巧 (十)
- 空间页面CSS说明