私有继承对try catch异常抛出的影响
2010-09-29 19:03
337 查看
本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。
原文链接:私有继承对try catch异常抛出的影响
运行的情况是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().
原文链接:私有继承对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().
相关文章推荐
- 私有继承对try catch异常抛出的影响
- c++笔记06---继承,公有继承,继承方式对访控属性的影响,私有继承和保护继承
- javascript封装类的技巧:具有私有成员、私有方法、特权属性、特权方法、原型对象、静态成员,最重要的是不会失去封装的优点,并且不影响继承
- 虚函数&虚继承存在对类的大小的影响
- C++ FAQ学习笔记 24章 继承 — 私有继承和保护继承
- 关于继承中(静态方法+私有方法)的覆盖与重写问题
- 私有构造函数对子类构造的影响
- 公有继承和私有继承的实例
- C++名字隐藏对公有继承的影响
- public公有继承,protected保护继承,private私有继承
- 公有继承,私有继承,和保护继承
- js模块,类,继承,命名空间,私有属性等相关概念梳理
- C/C++--私有继承
- Data语意学之虚继承和虚函数对C++对象内存模型造成的影响(类/对象的大小)
- C++中公有继承、保护继承、私有继承的区别
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- 私有继承与包含
- 公有继承,私有继承,保护继承的区别
- C++ 类继承(廿一)--基类、派生类、多态继承、公有继承、私有继承、虚函数、保护继承、多重继承
- 在继承中重写方法时抛出异常的问题