如果一个函数内使用了异常处理机制, VC 编译器在编译该函数时,它会给此函数插入一些“代码和信息”(代码指的是当该函数中出现异常时的回调函数,而信息主要是指与异常出现相关的一些必要的链表),因此每份函数只能有一份这样的东东(“代码和信息”),故一个函数只能采用一种形式的异常处理规则。

上图中黄色部分就是新添加的异常信息,通过stack unwinding来实现局部变量的析构函数自动调用。所以在析构函数中不能抛出异常(http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fcplr155.htm)
具体的异常信息分析见参考url.

/**************/
干货2
/**************/
好,你以为你理解了么,那么看下面的例子:

  1. #include <stdio.h>
  2. class A
  3. {
  4. public:
  5. A() {printf(" 构造一个 A 对象 n");}
  6. ~A() {printf(" 析构一个 A 对象 n");}
  7. void f1() {}
  8. void f2() {}
  9. };
  10. void main()
  11. {
  12. __try
  13. {
  14. A a1, a2;
  15. puts("in try");
  16. } __except(puts("in filter 1"), 1)
  17. {
  18. puts("in except 1");
  19. }
  20. }

编辑结果:
1>c:\users\junliang-aya\documents\visual studio 2008\projects\test\test\main.cpp(18) : warning C4509: 使用了非标准扩展:“main”使用 SEH,并且“a2”有析构函数
1>        c:\users\junliang-aya\documents\visual studio 2008\projects\test\test\main.cpp(16) : 参见“a2”的声明
1>c:\users\junliang-aya\documents\visual studio 2008\projects\test\test\main.cpp(18) : warning C4509: 使用了非标准扩展:“main”使用 SEH,并且“a1”有析构函数
1>        c:\users\junliang-aya\documents\visual studio 2008\projects\test\test\main.cpp(16) : 参见“a1”的声明
1>c:\users\junliang-aya\documents\visual studio 2008\projects\test\test\main.cpp(22) : error C2712: 无法在要求对象展开的函数中使用 __try

why?

因为只要有局部对象存在,就一定会存在c++异常处理机制try/catch,而你又调用__try/__except, 一个函数中只能有一种异常处理机制,所以出错。

参考:
http://baiy.cn/doc/cpp/inside_exception.htm
http://blog.pfan.cn/mroske/9865.html

最新文章

  1. greendao对SQLite数据库的增删改查操作
  2. sharepoint2010升级到sharepoint2013的升级步骤和过程
  3. Windows 服务开发框架介绍 - Topshelf
  4. PHP获取APK的包信息
  5. HDU(2485),最小割最大流
  6. 1、网页制作Dreamweaver(界面、基本操作、锚点、表格)
  7. lintcode:strStr 字符串查找
  8. 前台页面Josn 数组在后台.cs代码中的解析
  9. ldr指令总结
  10. Spring 接收表单List集合数据
  11. 使用PHP的strstr()函数来统计一段字符串中元音字母的个数(区分大小写)
  12. authorizations.go
  13. makefile编译错误情况整理
  14. Javascript中的函数(三)
  15. 【转】Python metaclass
  16. Appium-We wanted {&quot;required&quot;:[&quot;value&quot;]} and you sent [&quot;text&quot;,&quot;sessionId&quot;,&quot;id&quot;,&quot;value&quot;]
  17. Java 枚举类 详解
  18. Java学习 第二节
  19. python创建二维数组
  20. Linux安装系统选择 日报 18/06/23

热门文章

  1. javascript将浮点数转换成整数的三个方法
  2. js 倒计时 button不可用
  3. netbeans 优化设置
  4. XibDemo
  5. 20141111--SQL触发器
  6. 基于python yield机制的异步操作同步化编程模型
  7. NSS_10 EXTJS给弹出的子窗口传递参数
  8. NSS_09 gridpanel中的actioncolumn事件
  9. HIVE中join、semi join、outer join举例详解
  10. mybatis的一对多映射