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

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

c++::浅析c++异常

我觉得看到这篇文章的人肯定有很多疑问,比如:什么是异常?为什么要使用异常?使用异常会对程序代码有什么影响以及不使用又会怎样?等等。那么接下来我一一为你解答,跟着我揭开异常的面纱。 【我们还是先来了解...
  • lalu58
  • lalu58
  • 2016年11月17日 13:48
  • 4867

C++--异常(Exceptions)

C++--异常(Exceptions)     1.概况          异常即程序运行是发生错误。在C语言中通常用返回值来判断异常,返回值可以是bool型,用true表示无异常,...
  • u011763045
  • u011763045
  • 2014年03月23日 00:13
  • 1167

浅析c++异常

异常处理:异常,让一个函数发现自己无法处理的错误时抛出异常,让函数的调用者直接或间接的处理这个问题。传统错误处理办法1、终止程序。(如段错误等)2、返回错误码。3、返回合法值,让程序处于某种非法的状态...
  • Scenlyf
  • Scenlyf
  • 2016年06月11日 18:52
  • 106

【C++】 浅析异常

所谓异常,顾名思义就是不正常,有问题。对于人来说有不正常的时候即生病身体不适,那么对于程序也一样,也有不正常即代码“有病”。那么,既然有病就要治疗,就要对症下药!这样才能恢复正常。废了这么多话,还是引...
  • wbq1480
  • wbq1480
  • 2016年05月26日 12:25
  • 122

异常规范和c++11

《C++ Primer Plus》第六版 15.3.5 异常规范和C++11 有时候,一种理念看似有前途,但实际的使用效果并不好。一个?这样的例子是异常规范,这是c++98新增的一项功能,但c...
  • foto1991
  • foto1991
  • 2016年05月08日 15:07
  • 640

C++异常处理实例

/************************************************************************************************ *...
  • JarvisChu
  • JarvisChu
  • 2011年07月22日 22:41
  • 4025

TubinePro.exe 中的 0x7c812a5b 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012dfa4 处的 _com_error。

关于这个 vc++ 与数据库链接的问题。 自己总结应该从三方面考虑; 1. 数据库程序查询语句看是否有问题。 2 .查看数据库的表是否和程序中的变量对应(也就是同范围小数或字符串)。 3.. 看...
  • wj6910502
  • wj6910502
  • 2012年04月15日 10:53
  • 4034

浅析C++里面的宏

说到宏,恐怕大家都能说出点东西来:一种预处理,没有分号(真的吗?)。然后呢?嗯.......茫然中......好吧,我们就从这开始说起。最常见的宏恐怕是#include了,其次就是#define还有....
  • hustli
  • hustli
  • 2003年06月30日 13:45
  • 4502

【SonicUI】最可能的异常: Microsoft C++ 异常: 内存位置 0x0011f280 处的 char。

关于 “SonicUIDemo.exe”: 已加载“C:\Windows\System32\asycfilt.dll” SonicUIDemo.exe 中的 0x7516812f 处最可能的异常: ...
  • shen_wei
  • shen_wei
  • 2014年10月27日 13:46
  • 3547

解决——imread.exe 中的 0x757da832 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0052f888 处的 cv::Exception。

出现上图错误提示,问题基本是图片路径的问题。应将程序相应的图像放置在工程目录下(和cpp源文件同一目录下)。...
  • Lay_ZY
  • Lay_ZY
  • 2017年02月04日 09:13
  • 6462
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中的异常浅析
举报原因:
原因补充:

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