免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1792 | 回复: 4
打印 上一主题 下一主题

c++菜鸟问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-01 11:32 |只看该作者 |倒序浏览
以下代码来源于C++编程思想第二卷第一章异常处理。在linux下的g++编译和windows的cl编译运行后得到不同结果。
1)gcc符合书中在throw被调用后,析构函数自动被调用的说法
2)windows的vc6带的cl则没有调用
不知为何。

#include <iostream>
using namespace std;
class r {
public:
    r() { cout << "r()" << endl; }
    ~r() { cout << "~r()" << endl; }
};
void c() {
    r ri;
    cout << "c()" << endl;
    throw 2;
}
int main() {
    try {
        cout << "normal" << endl;
        c();
    } catch (int) {
        cout << "set2" << endl;
    }
    return 0;
}

论坛徽章:
0
2 [报告]
发表于 2008-07-01 13:00 |只看该作者
是VC6编译器的问题吗

论坛徽章:
0
3 [报告]
发表于 2008-07-01 14:06 |只看该作者

错!

从父类的析构函数开始,

当前类的构造函数没有走完,
那么当前对象不完整,
不能走当前类的析构函数;

但是父类的构造函数已经走完,
因为先走完父类的构造函数再走当前类的构造函数,
能够调用父类的析构函数。

[ 本帖最后由 yuanchengjun 于 2008-7-1 14:08 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-07-01 14:29 |只看该作者
原帖由 yuanchengjun 于 2008-7-1 14:06 发表
从父类的析构函数开始,

当前类的构造函数没有走完,
那么当前对象不完整,
不能走当前类的析构函数;

但是父类的构造函数已经走完,
因为先走完父类的构造函数再走当前类的构造函数,
能够调用父类的 ...



可是这里只有一个类class r ,还有一个函数void c() ,剩下就是主函数了

论坛徽章:
0
5 [报告]
发表于 2008-07-01 14:58 |只看该作者
我看到了,是编译选项的问题,VC6默认不支持异常处理,使用-GX选项开启异常处理,使用 cl -GX得到的结果和GCC相同,而使用cl则得不到相应的结果
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP