在C++中,关于异常抛取的相关原理求解

[复制链接]
查看11 | 回复1 | 2010-7-14 19:32:03 | 显示全部楼层 |阅读模式
例1(可以编译通过):
#include
using namespace std;
int main ()
{

int *p;

try

{

p = new int [1000000000];

}

catch (bad_alloc & e)

{

cout << "E" << endl;

}

delete p;

system ("pause");

return 0;
}
例2(不可以编译通过):
#include
using namespace std;
int main ()
{

int *p;

try

{

p = new int [1000000000];

}

catch (bad_alloc e)

{

cout << "E" << endl;

}

delete p;

system ("pause");

return 0;
}
例3(可以编译通过):
#include
using namespace std;
int main ()
{

int *p;

try

{

throw 7;

}

catch (exception e)//catch (exception & e)同样也可以编译通过

{

cout << "E" << endl;

}

delete p;

system ("pause");

return 0;
}
请结合1、3例详细解释为何2例不能编译通过,谢谢
修改:将例3中的exception换成int。

回复

使用道具 举报

千问 | 2010-7-14 19:32:03 | 显示全部楼层
类exception具有拷贝构造函数和赋值运算符重载,因此在catch时可以根据抛出的exception构造新的实参e。而类bad_alloc中没有上述两个函数,因此catch时只能处理已抛出的exception的引用,无法生成新的实参。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行