c++的异常机制

来源:互联网 发布:centos下lamp环境搭建 编辑:程序博客网 时间:2024/05/01 13:03

异常这玩意在函数调用层次深,模块多,出现异常立刻跳出,在最外层处理的情况下很好用。可以让代码变得更整洁。

throw出现时,程序会直接跳转到catch处(一直向函数上层搜索catch块,如果没有catch则直接崩溃)


try {
    throw **;
}
catch (**)
{
}


程序在执行时,可以理解为先调用throw函数,throw函数调用catch函数


===========以下测试代码可以反映这种过程

class A
{
public:
A(int _x):x(_x)
{
cout << "构造" << endl;
}
A(const A &other)
{
x = other.x;
cout << "拷贝构造" << endl;
}
~A()
{
cout << "析构" << endl;
}
int x;
};





======第一种
try {
A a(10);       //构造a
throw a;      //调用throw函数,将a传入函数,进行了拷贝构造出_a
}
catch (A  a)//被throw调用,只传递,进行拷贝构造出__a(此时throw上的作用域结束,a进行了析构)
{
cout << a.x << endl;
       //程序执行结束,析构__a,   返回到throw调用结束,析构_a
}





======第二种

try {
A a(10);       //构造a
throw a;      //调用throw函数,将a传入函数,进行了拷贝构造出_a
}
catch (A &a)//被throw调用,传入的是引用,不进行拷贝(此时throw上的作用域结束,a进行了析构)
{
cout << a.x << endl;

       //程序执行结束,返回到throw调用结束,析构_a
}



======第三种

try {
      throw A(10);//throw函数构造a
}
catch (A &a)//引用不进行拷贝
{
cout << a.x << endl;

        //程序执行结束,返回到throw调用结束,析构a
}


0 0
原创粉丝点击