使用了非标准扩展:“xxx”使用 SEH,并且“xxx”有析构函数
如果一个函数内使用了异常处理机制, VC 编译器在编译该函数时,它会给此函数插入一些“代码和信息”(代码指的是当该函数中出现异常时的回调函数,而信息主要是指与异常出现相关的一些必要的链表),因此每份函数只能有一份这样的东东(“代码和信息”),故一个函数只能采用一种形式的异常处理规则。
上图中黄色部分就是新添加的异常信息,通过stack unwinding来实现局部变量的析构函数自动调用。所以在析构函数中不能抛出异常(http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fcplr155.htm)
具体的异常信息分析见参考url.
/**************/
干货2
/**************/
好,你以为你理解了么,那么看下面的例子:
- #include <stdio.h>
- class A
- {
- public:
- A() {printf(" 构造一个 A 对象 n");}
- ~A() {printf(" 析构一个 A 对象 n");}
- void f1() {}
- void f2() {}
- };
- void main()
- {
- __try
- {
- A a1, a2;
- puts("in try");
- } __except(puts("in filter 1"), 1)
- {
- puts("in except 1");
- }
- }
编辑结果:
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
使用了非标准扩展:“xxx”使用 SEH,并且“xxx”有析构函数的更多相关文章
- 使用caddy实现非标准端口https
近来使用Halo搭建博客,并顺便把WeHalo小程序也把玩了起来,但是发现几个非常棘手的问题: 根据访问日志发现有三方在刷取关键接口的请求,http请求在部分情况下会暴露出很显著的安全问题: 小程序强 ...
- Linux BSP非标准HDMI分辨率
Linux BSP非标准HDMI分辨率 Intrinsyc公司发布了它的一个新的Linux BSP软件的发布 打开-Q820 开发套件基于Linux内核版本.支持的软件功能包括HDMI输出,可以支持标 ...
- Python解析非标准JSON(Key值非字符串)
采集数据的时候经常碰到一些JSON数据的Key值不是字符串,这些数据在JavaScript的上下文中是可以解析的,但在Python中,没有该部分数据的上下文,无法采用json.loads(JSON)的 ...
- [Effective JavaScript 笔记]第29条:避免使用非标准的栈检查属性
许多js环境都提供检查调用栈的功能.调用栈是指当前正在执行的活动函数链.在某些旧的宿主环境中,每个arguments对象含有两个额外的属性:arguments.callee和arguments.cal ...
- Wireshark分析非标准端口号流量
Wireshark分析非标准端口号流量 2.2.2 分析非标准端口号流量Wireshark分析非标准端口号流量 应用程序运行使用非标准端口号总是网络分析专家最关注的.关注该应用程序是否有意涉及使用非 ...
- 转 在无法通过yum下载非标准包时,怎么办
在CentOS下,我们可以通过yum来下载或更新rpm包,但是标准的源(repository)里只提供一部分的rpm包,虽然大部分情况下,这些包是够用的.但是有时候还是需要下载其他的一些非标准的包,如 ...
- python之读取配置文件模块configparser(三)高级使用---非标准配置文件解析
非标准配置文件也是经常使用的,如何使用configparser来解析? 这要从configparser本身解析结构来说,configparser包含section和option,非标准配置文件只有op ...
- 有一个VC的bug:非标准语法
---恢复内容开始--- 主函数中调用类的成员函数时报错: “error C3867:非标准语法:请使用 "&" 来创建指向成员的指针” 这时在函数前老老实实加上& ...
- SQL 将非标准日期格式转换成标准格式,进行条件判断
a.JLDate为非标准日期格式: 例: 2011-8-28 0:00:000011-8-28 0:00:000111-8-4 0:00:00 select CONVERT(varchar(50),C ...
随机推荐
- 使用vhd灌装系统——测试系统专用
需要使用工具imagex.exe 一. 创建虚拟磁盘: 1.diskpart 2.create vdisk file=c:\test\leiyue.vhd maximum=20000 [tpye=ex ...
- C#调用存储过程简单完整例子
CREATE PROC P_TEST@Name VARCHAR(20),@Rowcount INT OUTPUTASBEGIN SELECT * FROM T_Customer WHERE NAME= ...
- 20150309—bs的保存状态
http:保存状态方式,传值方式 session:(会话) 默认过期时间20分钟(20分内无任何操作自动销毁),针对用户独立,一般用来存储少量信息的 存值:session[“name”]=data;( ...
- Javascript Class
做个记录,javascript 如何创建类? 有早期的,有原型的,有构造函数的 // early javascript object var o = {}; o.color = 'red'; o.sh ...
- css笔记——关于css中写上charset “utf-8”
当css文件中写上 charset "utf-8" 时需要将body和html的样式分开写 例如: html,body{margin:0;padding:0;font-family ...
- hdu 1879 继续畅通工程
/************************************************************************/ /* hdu 1879 继续畅通工程 Time L ...
- Java中注解Annotation的定义、使用、解析
此例子,用于说明如何在Java中对“注解 Annotation”的定义.使用和解析的操作.注解一般用于自定义开发框架中,至于为什么使用,此处不作过多说明,这里只说明如何使用,以作备记.下面例子已测试, ...
- eclipse中tomcat配置(待完善)
tomcat版本:apache-tomcat-6.0.29 项目结构: 一.新建server方式 二.eclipse tomcat plugin方式 tomcat plugin方式必须保证 ...
- POJ 2533
最长上升子序列裸题在网上看到有两种方法...一种复杂度O(N^2),一种O(NlogN).orz O(N^2): #include<cstdio> #define N 1001 int m ...
- select的onChange事件问题解决
一.onChange事件只有在值改变时才可触发,所以必须在每一次选择时(尤其第一次)保证选择的值是改变的! 所以<select name="inv_payee" id=&qu ...