外加1:异常处理深度解析

本文探讨了C++中异常处理的基本原理,当异常在main函数中未被捕获时,会触发terminate()函数,该函数默认调用abort()终止程序。C++允许自定义terminate()函数,但自定义函数不能抛出异常。如果析构函数抛出异常,可能导致terminate()被多次调用。总结中强调了异常处理的最后机会和析构函数中避免异常的重要性。
摘要由CSDN通过智能技术生成

---- 整理自狄泰软件唐佐林老师课程

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()多次调用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uuxiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值