Essential C++ 第7章 异常处理

第7章 异常处理

7.1 抛出异常

异常处理机制有两个主要部分:异常的鉴定与发出,异常的处理。

C++通过throw表达式产生异常:

inline void Triangular_iteratir::

check_integrity()

{

if(_index>=Triangular::max__elems)

  throw iterator_overflow(_index,Triangular::max_elems);

}

throw表达式看起来有点像函数调用。

所谓 异常,是某种对象,最简单的异常对象可以是整数或字符串。

throw 42;

throw “no buffer”;

 

7.2 捕获异常

  使用单条或一串catch子句来捕获被抛出的异常对象。

  catch子句由3部分组成:关键字catch、小括号内的一个类型或对象、大括号的一组语句(用来处理异常)。

  如:catch(int errno){…}

      catch(iterator_overflow &iof){…}

  异常对象的类型会逐一和每个catch子句进行对比。类型符合则执行catch子句。

  如果我们无法完成异常的完整处理,在记录信息之外,或许需要重新抛出(throw),,寻求其他catch的协助。

  如果我们想捕获任何类型的异常,可以使用catch all方式catch(…)

  catch(…){…}

 

7.3 提炼异常

  catch子句和try块相应而生。 try块是以try开始,然后大括号一串语句,catch子句放在try块末尾。如果try块内发生异常,则由接下来的catch子句处理。

7.4 局部资源管理

auto_ptr是标准库提供的Class template,它会自动删除通过new分配的对象。

7.5 标准异常

如果new无法分配足够的内存,它会抛出bad_alloc异常对象。

 

标准库定义了一套异常类体系,其根部是名为exception的抽象基类。exception声明有一个what()虚函数,会返回一个const char*。用以表示被抛出异常的文字描述。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只大鸽子

如有帮助,欢迎关注同名公众号

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

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

打赏作者

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

抵扣说明:

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

余额充值