该文章内容整理自《C++ Primer Plus(第6版)》、《Effective C++(第三版)》、以及网上各大博客
文章目录
对于一个C++程序,从被加载至内存到最终走向死亡,大致有三种方式:
- 自然死亡,通常指main()中return 0;后正常结束程序
- 自杀,指请求系统将自身程序关闭,是一种请求式的自杀。有两种方式:void exit(int status)和void abort(void)
- 他杀,通常指父程序将子程序关闭。C++并没有提供他杀的方式,而往往是由系统直接或者间接(通过一些进程库,如pthread)提供
abort
abort()函数被包含在头文件<stdlib.h>中,其典型实现是向标准错误流(cerr使用的错误流)发送 abnormal program termination(程序异常终止),然后终止程序。调用Abort()时,不进行任何清理工作,直接终止程序
异常机制
对异常的处理由3部分组成:
- 引发异常
- 使用处理程序捕获异常
- 使用try块
C++异常处理的一般形式为
try {
//标识可能出现的异常代码段
throw 1;
throw "error";
}
catch(int i) {
//异常处理程序1
}
catch(char *str) {
//异常处理程序2
}
注意也可能在try代码块里调用的子程序使用throw抛出异常。此时,在函数出现异常而终止时程序会不断释放栈中的内存,直至找到try块的函数,并将控制权转移到其异常处理程序。这个过程叫作栈解退。在这个过程中,在throw之前创建的类对象会自动调用其析构函数释放对象,但是对于用new创建的空间,其对应的delete语句在throw语句后,则此时不会自动释放其空间,造成内存泄漏
另外,throw还能用来修饰函数,此时称之为异常规范,如

本文介绍了C++程序的三种结束方式,重点讲解了异常处理,包括abort()函数的使用、异常机制的三个组成部分以及如何使用try-catch捕获异常。此外,还详细阐述了C++的exception类,包括自定义异常和异常规范。
最低0.47元/天 解锁文章
900

被折叠的 条评论
为什么被折叠?



