---- 整理自狄泰软件唐佐林老师课程
1. 问题
如果在main函数中抛出异常会发生什么?
如果异常不处理,最后会传到哪里?
下面的代码输出什么?
1.1 编程实验:异常的最终处理
- 如果异常无法被处理,terminate()结束函数 会被自动调用
- 默认情况下,terminate()调用 库函数abort() 终止程序
- abort()函数使得程序执行异常而立即退出
- C++ 支持用自定义的结束函数 来替换默认的terminate()函数实现
1.2 terminate()函数的替换
- 自定义一个无返回值无参数的函数
- 不能抛出任何异常
- 必须以某种方式结束当前程序
- 调用set_terminate()设置自定义的结束函数
- 参数类型为void(*)()
- 返回值为默认的terminate()函数入口地址
1.3 编程实验:自定义结束函数
1.4 面试题
如果析构函数中抛出异常会发生什么情况?
- 编程实验:析构函数抛出异常
2. 小结
- 如果异常没有被处理,最后terminate()结束整个程序
- terminate()是整个程序释放资源的最后机会
- 结束函数可以自定义,但不能继续抛出异常
- 析构函数不能抛出异常,可能导致terminate()多次调用