In C++, is there a difference between “throw” and “throw ex”?
c++, exception
Solution
`throw;` rethrows the same exception object it caught while `throw ex;` throws a new exception. It does not make a difference other than the performance reasons of creating a new exception object. If you have a exception hierarchy where there some other exception classes derived from `MyException` class and while throwing an exception you have done a `throw DerivedClassException;` it can be caught by the `catch(MyException&)`. Now if you modify this caught exception object and rethrow it using `throw;` the type of exception object will still be `DerivedClassException`. If you do `throw Ex;` the object slicing occurs and the newly thrown exception will be of type `MyException`.
Problem
I'd like to ask this question (also here), but this time about C++. What is the difference in C++ between ``` try { /*some code here*/} catch(MyException& ex) { throw ex;} //not just throw ``` and ``` try { /*some code here*/} catch(MyException& ex) { throw;} //not throw ex ``` Is it just in the stack trace (which in C++ is in any case not a standard as in C# or Java)? (If it makes any difference, I use MSVS 2008.)