【第22期】观点:IT 行业加班,到底有没有价值?

C++中的异常浅析

原创 2016年05月31日 09:07:43

   我们都知道,无论是在C语言中还是C++的编程调试中,我们都会遇到各种各样的错误,那么在遇到这些错误的时候我们要怎么处理它们呢?

这里有一些传统的处理错误的方法:

 ①终止错误

 ②返回错误码

 ③返回合法值,让程序处于某种错误状态,

 ④调用一个预先设置好的处理错误的函数--->(回调函数)

    为了更好地处理这一类问题,在C++中提出了异常,当函数出现一个自己无法处理的错误时,就会抛出异常,让函数的调用者直接或间接的来处理这个问题。

来举一个例子:

例1:

wKioL1cFAMyijsWDAACCC2_kWpg925.png

对于函数div来说,程序没有一种机制来处理当num2为零时的情况,所以我们可以通过抛出异常来解决这个问题

spacer.gif注意:当throw出异常的时候,后面括号里的参数一定要和catch后面括号里的数据类型匹配


例2:下面再来举一个例子wKiom1cE_9vDZ9UXAACiCZpEmLM444.png

spacer.gif

   从上面的代码可以看出,由于一旦抛出异常,就要进行捕获,所以在抛出异常的同时也不可避免的影响了代码的执行流,也就是代码不一定就顺序执行了,因此在抛出异常之前,如果有malloc或new开辟的空间时,一定要在执行流改变之前将其释放,否则就会出现内存泄漏的问题。

通过以上两个例子,我想大家一定能够对异常有一定的了解了吧,下面我来对异常做几点总结:


 ①异常是通过抛出对象引发的,该对象的类型取决了激活哪一类的异常

 ②被选中的异常处理代码是调用链中抛出对象类型相同的最近一个开始的

 ③抛出异常会释放局部存储对象,被抛出的对象也还给了系统,异常对象在catch处理后也还给了系统

Tips:

异常捕获的匹配规则

1.允许非const到const的转换,也就是const可以接受匹配非const

2.允许派生类型到基类的转换(父类的指针或引用可以指向或引用一个子类,将其作为接受的类型)

3.将数组转换为一个指向数组类型的指针,将函数转换为函数指针类型


注意事项

一般不要在析构函数或构造函数中抛出异常



本文出自 “福大馨” 博客,请务必保留此出处http://10800121.blog.51cto.com/10790121/1761052

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Visual C++中的异常处理浅析

Visual C++中的异常处理浅析 作者:宋宝华 e-mail:21cnbao@21cn.com Visual C++提供了对C语言、C++语言及MFC的支持,因而其涉及到的异常(exception...

JAVA和C++区别浅析

JAVA和C++区别浅析 [url=http://bbs.chinaitlab.com/][/url] JAVA和[url=http://c.chinaitlab.com/]C++[/url]都是面向对象语言。也就是说,它们都能够实现面向对象思想(封装,继乘,多态)。而由于c++为了照顾大量的C语...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

Visual C++中的异常处理浅析

http://dev.yesky.com/115/2158115.shtml#top

.NET内存分配浅析

.NET内存分配浅析 我知道这是一个富有神话色彩的主题,同样也是个深奥的主题,说它神话是因为.NET程序员几乎看不到它,但是它一直在保护着.NET程序的运行,说它深奥可能涉及一些底层的东西在这个高级的编程语言里显得有点与众不同。我希望通过本文能和大家一起分享.NET关于内存分配上的一些经验,正如题目...

Visual C++中的异常处理浅析

Visual C++提供了对C语言、C++语言及MFC的支持,因而其涉及到的异常(exception)处理也包含了这三种类型,即C语言、C++语言和MFC的异常处理。除此之外,微软对C和C++的异常处...
  • hbyh
  • hbyh
  • 2007-10-22 17:40
  • 406
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)