精英盒子 -> 程序设计 -> 你绝对不知道C++支持如此奇葩的语法 [打印本页]

jybox 2012-05-12 20:48

你绝对不知道C++支持如此奇葩的语法

如题
[attachment=322]


奇葩到,以至于一直以来我认为代码高亮做的最好的Qt Creator都给我显示错误(编译是可以通过的)

源代码:http://codepad.org/0zKaBOXR
在我的电脑上g++ 4.6.1和Codepad的g++ 4.1.2上编译通过...无警告

奇葩之处就是上面类A的构造函数:
    A(unsigned long size)
        try//这是为了捕捉初始化列表抛出的异常
            :data(new char[size]),//初始化列表
              isOk(false)//初始化列表
        {//构造函数的内容,也是try的内容
            std::cout<<"空间申请成功"<<std::endl;
            isOk=true;
        }
        catch(...)
        {//处理所有的异常
            std::cout<<"空间申请失败 ";
            throw;
        }



其实我一直没怎么用过C++的异常机制....原因嘛...原因就是Qt也没有用...

scxy 2012-05-13 09:53
Catch(...)那里?

jybox 2012-05-13 11:23
scxy:Catch(...)那里? (2012-05-13 09:53) 

什么?

jybox 2012-05-16 23:08
补充一下...
如果使用这种语法来捕捉构造函数初始化列表的异常,那么异常会自动被再次throw;
也就是说,上面第17行的那个throw;即使不加,异常也会自动重新被抛出

jybox 2012-05-16 23:09
至于作用..

这种用法的作用就是如果你在初始化列表中分配动态内存失败了,那么你有机会回收被泄漏的内存




Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.042390 second(s),query:5 Gzip enabled