Tutorial :What happens if a throw; statement is executed outside of catch block?


In C++ throw; when executed inside a catch block rethrows the currently caught exception outside the block.

In this answer an idea of exception dispatcher is brought up as a solution to reducing code duplication when using complex exception handling often:

try {      CodeThatMightThrow();  } catch(...) {      ExceptionHandler();  }    void ExceptionHandler()  {      try {          throw;      } catch( FileException* e ) {          //do handling with some complex logic          delete e;      } catch( GenericException* e ) {          //do handling with other complex logic          delete e;      }  }  

Throwing a pointer or a value doesn't make any difference so it's out of the question.

What happens if ExceptionHandler() is called not from a catch block?

I tried this code with VC7:

int main( int, char** )  {         try {          throw;      } catch( ... ) {          MessageBox( 0, "", "", 0 );      }      return 0;   }  

First it causes the debugger to indicate a first-chance exception, then immediately an unhandled exception. If I run this code outside the debugger the program crashes the same way as if abort() has been called.

What is the expected behaviour for such situations?


From the Standard, 15.1/8

If no exception is presently being handled, executing a throw-expression with no operand calls std::terminate().

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »