自学内容网 自学内容网

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既是异常说明符也是运算符


原文地址:https://blog.csdn.net/qq_42279379/article/details/140332396

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!