C++的异常处理机制

(1)Why(异常处理机制的作用)

异常处理机制的目标是在异常情况发生时,能够捕获并处理这些异常,使程序能够进行适当的恢复或终止,并提供相应的错误信息

通过使用异常处理机制,可以改善程序的健壮性和可维护性,使程序更加可靠和可预测

(2)How(异常机制如何工作)

A.抛出异常

通过使用 throw 关键字抛出一个异常对象。异常对象可以是内置类型、自定义类型或标准库提供的异常类的实例

B.捕获异常

try 和 catch 捕获异常,使用 try 块来捕获异常。try 块后跟一个或多个 catch 块,每个 catch 块用于捕获特定类型的异常

C.处理异常

当发生异常时,如果能够匹配到相应类型的 catch 块,程序将进入匹配的 catch 块, 并执行其中的异常处理代码。异常处理代码可以根据需要进行恢复操作、输出错误信 息、记录日志等

D.传递异常

如果一个异常没有在当前的 try-catch 块中得到捕获,它将被传递给上层调用的 try-catch 块,直到找到匹配的 catch 块或者到达程序的顶层

注意:一个异常如果没有被捕获到,它将终止程序的执行过程(调用标准库函数 terminate)

(3)抛出异常

A.栈展开

如果 try 语句块嵌套使用,其本质是一个栈展开的形式

B.析构函数和异常

析构函数一定会被执行,但是函数中负责释放资源的代码却可能因为异常而被跳过, 因此考虑使用类来管理资源是一个非常不错的选择,它能确保无论是否发生异常,都 能释放资源。所有的标准库类型都能确保它们的析构函数不会引发异常

C.异常对象

异常对象位于编译器所管理的空间当中,编译器确保无论最终调用哪个 catch 子块都能 访问该异常对象;当异常处理完毕后,异常对象被销毁

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(4)捕获异常

  • catch 的参数最好定义成引用类型
  • catch 的参数类型存在继承关系时候,子孙类放在最前面
  • 重新抛出:上一个catch处理完之后,catch会调用throw重新抛出传递给下一个catch
    在这里插入图片描述

捕获所有异常:

一次性捕获所有异常 catch(…),可以与任意类型的异常匹配

在这里插入图片描述

(4)处理异常

A.构造函数的异常处理

当构造函数的初始值列表发生异常时,构造函数内的 try 语句还没有生效

在这里插入图片描述

B.不抛出异常noexcept

作用:用于指定某函数不跑出异常

位置:

在这里插入图片描述

C.noexcept运算符

用于判断函数时候抛出异常(函数后有没有被noexcept修饰)

在这里插入图片描述
说明:noexcept既是异常说明符也是运算符

================================================================================


如果读者对C++感兴趣,欢迎阅读笔者关于在学习C++过程中的关于其知识点的总结系列,入口如下:

C++知识点总结全系列文章索引:
【C++知识点总结全系列 (01)】:数据类型、数据类型转换和变量
【C++知识点总结全系列 (02)】:C++中的语句、运算符和表达式详细总结
【C++知识点总结全系列 (03)】:函数(函数参数传递、可变参数、函数返回值等详细介绍)
【C++知识点总结全系列 (04)】:C++类的详细总结与分析
【C++知识点总结全系列 (05)】:IO 类的详细总结和分析
【C++知识点总结全系列 (06)】:STL六大组件总结- 配置器、容器、迭代器、适配器、算法和仿函数
【C++知识点总结全系列 (07)】:模板与泛型编程详细总结与分析
【C++知识点总结全系列 (08)】:面向对象编程OOP


  • 22
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值