您的位置:首页 > 其它

私有继承对try catch异常抛出的影响

2010-09-29 19:03 337 查看
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。

原文链接:私有继承对try catch异常抛出的影响

#include
class A
{
public:
A(int i)
{
cout << "Ctor in A" << endl ;
}
virtual ~A()
{
cout << "Dtor In A" << endl ;
}
} ;
class B : private A
{
public:
B(int i) : A(i)
{
cout << "Ctor in B" << endl ;
}
~B()
{
cout << "Dtor In B" << endl ;
}
} ;
int main(int argc, char* argv[])
{
try
{
throw B(1) ;
}
catch( A& )
{
cout << "Exception caught!" << endl ;
}
return 0 ;
}


运行的情况是debug error。测试后发现将catch( A& )改为catch(…)可以成功运行。

说明B(1)无法被catch( A& )捕获。

而编译A* d= new B(4);g++报error: ‘A’ is an inaccessible base of ‘B’。

throw B不能转换成A。所以catch不执行,栈上找不到更深的catch。

最后__cxa_throw() 调用了std::terminate ();引起了abort().
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: