c++学习 异常

c++学习 异常

为什么要用异常

对于程序中不想发生的事情,我们常常使用判断返回值的方法来应对各种情况,但是这种方法有缺点:
1、返回值可能意义不明。
2、可能忘记处理返回值。

而引入异常后就可以解决这些问题,且异常还有两个好处:
1、表义更加丰富。
2、可以跳级。

基本语法

在这里插入图片描述注: 一个try后可以接多个catch,处理多种异常。
在这里插入图片描述
注: 若异常被传到顶层都没有被处理,则程序会调用terminal()函数结束。

另外,catch可以捕获所有异常:

catch(...){}	//不是省略的意思,真的就是三个点

栈解旋

所谓栈解旋就是说当throw抛出异常前,会把出现异常的函数中的临时变量全部释放掉(若果是类的话也会调用析构函数)。

异常接口声明

在这里插入图片描述

抛出异常类

throw myexception();	//这个异常类是自己定义实现的

throw后面跟异常类的构造函数,即抛出了一个异常类的匿名对象。

异常对象生命周期

1、若抛出异常的类型的是一个普通变量(这时会进行拷贝构造)或者变量的引用,则在catch处理完毕后就生命周期结束。
2、若抛出异常的类型的是一个变量的指针,则在catch处理之前,该变量就会被释放掉,所以执意要使用指针的话,可以:

throw new myexception();

并之后在catch的处理末尾将其手动释放。

c++标志异常类

在这里插入图片描述由于exception是所有标准异常类的父类,所以在catch标准异常类时都可以用exception匹配。

自己的异常类

由于标准异常类的功能是有局限的,我们往往要写自己的异常类来实现个性需求,但是有几点要注意:
1、自己的异常类要继承标准异常类
2、继承标准异常类后要重载父类的what函数和析构虚函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值