C++的异常处理机制(待续)

异常类匹配方式

throw抛出的异常类型和catch中处理的异常类型需严格匹配,异常处理器不做类型转换,下面几种情况除外:
1. 基类可以匹配到派生类这个在函数和异常匹配中都是有效的,但是需要注意catch的形参需要是引用类型或者是指针类型,否则会导致切割派生类这个问题。
2. 允许非常量到常量的烈性转化
3. 允许数组被转换为数组指针,允许函数被转换为函数指针

抛出异常的捕获机制

抛出一个异常的时候,异常会随着函数调用关系,一级一级向上抛出,直到被捕获才会停止,如果最终没有被捕获(catch)将会导致调用terminate函数。,C++提供了set_terminate 函数可以用来设置自己的terminate函数.设置完成后,抛出的异常如果没有被捕获就会被自定义的terminate函数进行处理。

异常中的资源清理问题

c中函数跳转时不会调用对象的析构函数,会导致内存泄露的问题。C++中的异常则不会有这个问题,C++中通过堆栈反解将已经定义的对象进行析构,但是有一个例外就是构造函数中如果出现了异常,那么这会导致已经分配的资源无法回收。所以,因此实际编程过程中应该避免在构造函数/虚构函数中抛出异常,如果没有办法避免,那么一定要在构造/析构函数中对其进行捕获进行处理

catch(…)用于处理任意异常

C++中的标准异常

C++ 提供了一系列标准的异常,定义在 exception 中,我们可以在程序中使用这些标准的异常。它们是以父子类层次结构组织起来的,如下所示:


@c++标准异常
下表是对上面层次结构中出现的每个异常的说明:

@异常说明

参考:c++中的标准异常详细说明

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值