一个关于在__try中使用有构造的类问题

clane 2003-10-20 04:33:00
编译时提示不能在__try中使用需要unwindding的局部类,有无办法可以解决这个问题的?
...全文
71 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bullfinch 2003-10-23
  • 打赏
  • 举报
回复
用编译器指令/GX-
参看链接器错误C2712
clane 2003-10-20
  • 打赏
  • 举报
回复
en,你说的是try,catch
但我这里的问题是__try,__catch的SEH
而且我也没有在析构中抛出异常。。。
会思考的草 2003-10-20
  • 打赏
  • 举报
回复
局部对象在超出作用域后会进行析构,而一旦析构失败,会带来连锁反应。
C++的规则是你绝对不可以在另一个异常的被称为“栈展开(stack unwinding)”的过程中时,从析构函数抛出异常。举例来说,如果某人写了throw Foo(),栈会被展开,以至throw Foo()和 } catch (Foo e) { 之间的所有的栈页面被弹出。这被称为栈展开(statck unwinding)
在栈展开时,栈页面中的所有的局部对象会被析构。如果那些析构函数之一抛出异常(假定它抛出一个Bar对象),C++运行时系统会处于无法决断的境遇:应该忽略Bar并且在} catch (Foo e) { 结束?应该忽略Foo并且寻找 } catch (Bar e) { ?没有好的答案——每个选择都会丢失信息。
因此C++语言担保,当处于这一点时,会调用terminate()来杀死进程。突然死亡。
防止这种情况的简单方法是不要从析构函数中抛出异常。但如果你真的要聪明一点,你可以说当处理另一个异常的过程中时,不要从析构函数抛出异常。但在第二种情况中,你处于困难的境地:析构函数本身既需要代码处理抛出异常,还需要处理一些“其他东西”,调用者没有当析构函数检测到错误时会发生什么的担保(可能抛出异常,也可能做一些“其他事情”)。因此完整的解决方案非常难写。因此索性就做一些“其他事情”。也就是,不要从析构函数中抛出异常。
当然,由于总有一些该规则无效的境况,这些话不应该被“引证”。但至少99%的情况下,这是一个好规则。
本课程采用了漫画+动手实操+练习讲授Python编程技能。课程简介:第6章 容器型数据6.1 序列6.1.1 序列的索引操作6.1.2 加与乘操作6.1.3 切片操作6.1.4 成员测试6.2 列表6.2.1 创建列表6.2.2 追加元素6.2.3 插入元素6.2.4 替换元素6.2.5 删除元素6.3 元组6.3.1 创建元组6.3.2 元组拆包6.4 集合6.4.1 创建集合6.4.2 修改集合6.5 字典6.5.1 创建字典6.5.2 修改字典6.5.3 访问字典视图6.6 动动手 —— 遍历字典6.7 练一练第7章 字符串7.1 字符串的表示方式7.1.1 普通字符串7.1.2 原始字符串7.1.3 长字符串7.2 字符串与数字的相互转换7.2.1 将字符串转换为数字7.2.2 将数字转换为字符串7.3 格式化字符串7.3.1 使用占位符7.3.2 格式化控制符7.4 操作字符串7.4.1 字符串查找7.4.2 字符串替换7.4.3 字符串分割7.5 动动手 —— 统计英文文章单词出现的频率7.6 练一练第8章 函数8.1 定义函数8.2 调用函数8.2.1 使用位置参数调用函数8.2.2 使用关键字参数调用函数8.3 参数的默认值8.4 可变参数8.4.1 基于元组的可变参数( *可变参数)8.4.2 基于字典的可变参数( **可变参数)8.5 函数变量的作用域8.6 函数型8.6.1 理解函数型8.6.2 过滤函数filter()8.6.3 映射函数map()8.7 lambda()函数8.8 动动手 —— 使用更多的lambda()函数8.9 练一练第9章 与对象9.1 面向对象9.2 定义9.3 创建对象9.4 的成员9.4.1 实例变量9.4.2 构造方法9.4.3 实例方法9.4.4 变量19.5 封装9.5.1 私有变量9.5.2 私有方法9.5.3 使用属性9.6 继承性9.6.1 Python的继承9.6.2 多继承9.6.3 重写方法9.7 多态性9.7.1 继承与多态9.7.2 鸭子型测试与多态9.8 练一练第10章 异常处理9.8 练一练10.1 第一个异常 —— 除零异常10.2 捕获异常110.2.1 try-except语句10.2.2 多个except代码块10.2.3 多重异常捕获10.2.4 try-except语句嵌套10.3 使用finally代码块释放资源10.4 自定义异常10.5 动动手 —— 手动引发异常10.6 练一练

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧