异常处理中的问题

来源:互联网 发布:极品飞车ola车数据 编辑:程序博客网 时间:2024/05/22 03:11

一、C++异常处理机制可以实现:
1、允许从异常抛出点把任何数量的信息以类型的方式传递到异常处理器;
2、对于没有抛出任何异常的代码段,不会带来任何额外的时间和空间的开销;
3、保证所抛出的任何一个异常都能被适当的处理器捕获;
4、通过一种组合方式可以使用编写出处理一组异常的处理器;
5、能够直接应用于多线程的程序中。
二、异常处理的一般语法:
try {/* 代码段 */ throw()} catch(){}
三、C++进行异常处理时,会保存每一个throw语句抛出的异常对象类型和每一个catch子句的参数类型信息,其目的就是在运行时保证一场处理对象和异常处理器的类型匹配。
四、构造和析构函数中产生的异常:
1、如果在构造函数中抛出异常,不会引发析构函数的调用。会造成内存泄露问题,使用auto_ptr指针解决,起作用就是在析构时自动删除该指针所指对象。
2、如果是析构函数产生抛出异常,应在析构函数内部捕获它。
3、全局对象在程序开始运行前被构造,因此如果构造函数中有异常抛出,将永远不会被捕捉,析构函数也相同,此异常只有造作系统才能捕获,应用程序无法捕获。
五、使用构造函数默认参数时,如果函数很少使用默认值,那么指定默认值会危害程序,使用时应慎之又慎。
六、unexpected()函数是记录错误并调用terminate()函数。当函数时机抛出异常类型与函数原型的异常规格说明不一致时,就会调用unexpected函数,并抛出unexpected异常,该函数不捕获异常。使用set_unexpected函数能够改变unexpected函数的行为。
七、terminate()函数的作用是记录错误,释放已知系统的资源并调用abort()函数,abort()函数可以不用调用正常的终止函数而直接从程序中退出。可以将其理解为exit()函数。

0 0
原创粉丝点击