VC异常处理随笔

转载 2012年03月26日 19:43:53
 

VC异常处理随笔

分类: C/C++ 535人阅读 评论(2) 收藏 举报

转自:http://cetion.blog.sohu.com/71842570.html

 

================================================================================

 

1:如果使用普通的处理方式:ASSERT,return等已经足够简洁明了,请不要使用异常处理机制.

2:可以通过异常处理简化程序结构.

A:如果if~else,用来排除异常时(注意不是一般条件判断时),如果出现多个if~else的嵌套从而影响了程序结构时,可以使用异常化处理.

3:c++中的try{}catch(...){},三个.代表所有的异常.(异常分不同的类型).

 try
 {
  int *a;
  a=(int *)0x00001;
     *a=99;
 }
 catch(...)
 {
  AfxMessageBox("error");
 }

4:throw,用来人为的 扔出一个异常.

5.比C的setjump,longjump优秀. 

6.可以处理任意类型的异常. 
你可以人为地抛出任何类型的对象作为异常. 
throw 100; 
throw "hello"; 
... 

7.需要一定的开销,频繁执行的关键代码段避免使用C++异常处理机制. 

8.其强大的能力表现在: 
A.把可能出现异常的代码和异常处理代码隔离开,结构更清晰. 
B.把内层错误的处理直接转移到适当的外层来处理,化简了处理流程.传统的手段是通过一层层返回错误码把错误处理转移到 
上层,上层再转移到上上层,当层数过多时将需要非常多的判断, 以采取适当的策略. 
C.局部出现异常时,在执行处理代码之前,会执行堆栈回退,即为所有局部对象调用析构函数,保证局部对象行为良好.
D.可以在出现异常时保证不产生内存泄漏.通过适当的try,catch布局,可以保证delete pobj;一定被执行.

E.在出现异常时,能够获取异常的信息,指出异常原因. 并可以给用户优雅的提示. 
F.可以在处理块中尝试错误恢复.保证程序几乎不会崩溃. 通过适当处理,即使出现除0异常,内存访问违例,也能让程序不崩溃,继续运行,这种能力在某些情况下及其重要.

 

9陷阱:派生类中的异常规范 
在派生类中重定义或覆盖一个函数定义时,它应具有与基类中一亲友的异常规范,或至少应该在新的异常规范中给出基类异常规范的一个子集.换言之,重定义或覆盖一个函数定义时,不可在异常规范中添加新异常.但是,如果愿意,可删减基类中原有的异常.之所以有这个要求,是因为在能够使用基类对象的任何地方,都能使用一个派生类对象.因此,重定义或覆盖的函数必须兼容于为基类对象编写的任何代码.

 

10:assert 语句是在程序中进行错误检查的一种精简方式.

Assert语句在cassert库中定义,所以使用assert语句的任何程序都必须包含以下include预编译指令: 
#include 
Assert是一个宏(类似于函数的一种结构),所以有必要在一个库中定义它. 
使用assert语句的一个好处是可以将其关闭.你可在自己的程序中用assert语句来高度程序,再将其关闭使用户看不到他们无法理解的错误消息.关闭assert语句,还能减少程序执行这些语句的开销.要关闭程序中的所有assert语句,请在include预编译指令之前添加#define NDEBUG,如下所示: 
#define NDEBUG 
#include 
因此,如果在进行了全面高度的程序中插入#define NDEBUG, 就会关闭程序中的所有assert语句.如果以后改动了程序,可删除程序中的#define NDEBUG重新打开assert语句.

VC异常处理随笔

转自:http://cetion.blog.sohu.com/71842570.html =======================================================...
  • dragon_feeling
  • dragon_feeling
  • 2010年04月27日 11:45
  • 1321

vc2012 异常捕获并处理

在处理大量数据的程序中,对于缓冲区处理稍有不慎,程序崩溃,然而在实际的使用中,我们的程序在发生错误之后不能停留在崩溃的界面上,必须立刻停止显示错误信息,重新启动程序。我本人也是长期未注意这个问题,始终...
  • woshidaniu
  • woshidaniu
  • 2015年08月12日 00:20
  • 1007

Halcon-VC异常处理

首先声明 // exception handler void MyHalconExceptionHandler(const Halcon::HException& except) { ...
  • haohaoxuexi320
  • haohaoxuexi320
  • 2014年06月10日 15:46
  • 2042

异常处理随笔

 在组件设计中或者是数据处理的方法中,最好不要处理数据是否为空的情况,除非我们在逻辑上知道,为空在这里是合法的。如果处理了数据为空的情况,表面上看是避免了错误,但实际上可能为bug提供一个非常隐蔽的场...
  • firefox1
  • firefox1
  • 2007年08月29日 21:48
  • 587

2016新年随笔

前言 题外话:【我爱王梦】 生活:        高考时的失利,让我在很大的一段时间内都走不出来,那段时间真的不知道自己在想什么?又到底在做着什么?说真的,那段时间我感觉到了真正的孤独,没...
  • wangmeng951011
  • wangmeng951011
  • 2016年02月11日 12:02
  • 463

博客园首页新随笔联系管理订阅 随笔- 7 文章- 0 评论- 4 ElasticSearch 5.0.1 java API操作

博客园首页新随笔联系管理订阅 随笔- 7  文章- 0  评论- 4  ElasticSearch 5.0.1 java API操作   ...
  • gaoqiao1988
  • gaoqiao1988
  • 2016年12月25日 09:15
  • 615

深入解析结构化异常处理(SEH)

深入解析结构化异常处理(SEH) 一直对Windows异常处理的原理似懂非懂, 看了下面的文章 ,一切都豁然开朗. 1997年文章,Windows技术的根一直没变: http://www.mic...
  • u011565209
  • u011565209
  • 2016年06月27日 18:33
  • 1849

【异常处理】MFC程序崩溃的友好处理

软件总存在这样或者那样的bug。 虽然测试员已经在很努力的寻找问题,程序员也在汗流浃背的除虫,但是总会有一些情况被遗漏或者不可预测,比如用户的硬件环境、网络状况、操作系统差异等等,不一而足。而导...
  • zhongguoren666
  • zhongguoren666
  • 2012年12月22日 10:11
  • 3487

寒假计划随笔

未来畅想      大三过半,已经到了为未来做打算的时候了。我打算不考研了,我认为本专业的实践能力比较重要,早些着手实践,工作一段时间以后有精力的话就准备考研,提升自己的知识储备。大学三年我的实践能...
  • yangyayan21
  • yangyayan21
  • 2018年01月20日 10:39
  • 33

vc随笔

一、限制窗口大小 处理WM_GETMINMAXINFO消息,该消息wParam不使用,lParam是MINMAXINFO结构指针,若处理该消息,必须返回0; case WM_GETMINMAXINFO...
  • lslsyqyq
  • lslsyqyq
  • 2014年02月13日 13:52
  • 420
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VC异常处理随笔
举报原因:
原因补充:

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