2015-10-27 5 views
0

класс MyExceptionBase {};Как полиморфно бросать?

class MyExceptionDerived : public MyExceptionBase { }; 

     void f(MyExceptionBase& e) 
     { 
    // ... throw e; 
     } 

     void g() 
     { 
      MyExceptionDerived e; 
     try{ 
       f(e); 
      } 
     catch (MyExceptionDerived& e) 
     { 
      ...code to handle MyExceptionDerived... 
     } 
     catch (...) 
     { 
      ...code to handle other exceptions... 
     } 
    } 

Если вы попробуете это, во время выполнения, когда ваш улов (...) пункт вводится, а не ваш улов (MyExceptionDerived &) положения, что происходит?

ответ

0

throw концептуально выдает копию объекта исключения. Поскольку вы выбрасываете функцию f(), вы нарезаете копию MyExceptionBase и бросаете это.

примечание: всегда вывести базу исключений из std::runtime_error или std::logic_error.

Смежные вопросы