私有继承对try catch异常抛出的影响
2009-07-02 17:40
183 查看
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。 原文链接:http://www.cuteqt.com/blog/?p=27
#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().
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。 原文链接:http://www.cuteqt.com/blog/?p=27
#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().
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。 原文链接:http://www.cuteqt.com/blog/?p=27
相关文章推荐
- 私有继承对try catch异常抛出的影响
- c++笔记06---继承,公有继承,继承方式对访控属性的影响,私有继承和保护继承
- javascript封装类的技巧:具有私有成员、私有方法、特权属性、特权方法、原型对象、静态成员,最重要的是不会失去封装的优点,并且不影响继承
- Js实现类继承和闭包私有成员并调用
- 共有继承,保护继承,私有继承的区别c++代码实例
- 共有继承,保护继承,私有继承的区别c++代码实例
- 读《深度探索C++对象模型》之分层继承对于内存布局的影响
- 私有继承
- Effective C++ 第二版 40)分层 41)继承和模板 42)私有继承
- fork exec对子进程继承父进程信号处理机制的影响--APUE
- C++继承:公有,私有,保护
- C++继承:公有,私有,保护
- C++私有继承
- 【C++基础】公有,私有和受保护的继承
- c++类的继承:私有继承,公有继承,保护继承
- try catch异常抛出与spring事务回滚策略相关
- 私有继承、保护继承、公共继承之间的区别(代码形式)
- 继承:子类可以继承父类的私有成员变量吗??
- C++继承:共有 私有 保护
- 实现继承(公有私有保护继承以及多继承)