笔记之异常处理和RTTI

来源:互联网 发布:淘宝一钻卖家发布数量 编辑:程序博客网 时间:2024/06/05 05:43
高质量程序设计指南-c/c++语言:笔记之异常处理和RTTI(运行时类型定义)


*. c++保证:如果一个异常在抛出点没有得到处理,那么它将一直被跑向上层调用者,直至main()函数,直到找到一个类型匹配的异常处理器,否则调用terminate()结束程序。
可以看出:异常处理机制实际上是一种运行时通知机制。


*. 异常处理机制:1.抛出异常 throw Class() 2.捕获异常 try {  code...  } catch (Class&) { cerr<<""<<endl; }
*. 任何一种类型都可以当作异常类型,因此任何一个对象都可以当作异常对象。
*. 传统c的处理错误的方式,就是通过值的匹配来进行处理的,但是高级的异常处理方式;c++的,就通过类型来匹配了,而不是仅仅值的匹配。 
*. 我们通常不使用基本类型来作为异常处理类型,因为他们表现的能力不足;相反,总是自定义一些异常类来具体描述我们需要的异常类型。
*. 异常处理也是一种程序控制结构,它包括4个组成部分:抛出异常、提炼异常、捕获异常、及异常对象本身。 throw try catch 
1.一条throw语句只能抛出一个异常,一个catch子句也只能捕获一种异常。 需要注意的是:异常抛出点常常和异常捕获点距离很远,异常抛出点可能深埋在底层软件模块内,而异常捕获点常常在高层组件中;异常捕获却必须和异常提炼(try块)结合使用,并且可以通过异常组合在一个地点捕获多种异常。
catch(...){} //这句可以放在try catch块的最后面, 因为它可以捕获所有的异常。就好像java中的Exception类,祖先类。
2.throw行为上更像是一个goto 语句。
3.在没有异常的情况下,异常处理机制是不会给程序增加任何额外的负担。


*. 
1.int fun() throw(Cwj); 只可能抛出一种异常
2.int fun() throw(C1,C2,C3); 可能抛出3种异常
3.int fun() throw(); 不抛出任何异常
4.int fun(); 可能抛出任何异常


*. 对象构造和析构期间的异常
因为构造和析构的过程中也可能出现错误,但是他们没有返回值来表示运行时的错误信息,最合适的方式就是抛出异常。我们不必担心在构造中创建号了对象后却发生异常会不会导致内存泄漏。 这个是不会的, 因为构造函数抛出异常的话,前面分配好的内存空间将被释放。这得意于new运算符内部的实现,因此不会造成内存的泄漏。


编程思想:只有大胆的使用,你才能够有机会去了解他和熟悉他和深入理解其机制原理。
原创粉丝点击