Can anyone please confirm me if this information is correct or not:
In C++, inside catch block we can re-throw an exception using throw statement, but the thrown exception should have the same type as the current caught one.
When an exception is cached in a catch block, you can re-throw it using the throw keyword (which is used to throw the exception objects). Or, wrap it within a new exception and throw it.
Answer: When an exception is thrown in the catch block, then the program will stop the execution. In case the program has to continue, then there has to be a separate try-catch block to handle the exception raised in the catch block.
When an exception is caught, we can perform some operations, like logging the error, and then re-throw the exception. Re-throwing an exception means calling the throw statement without an exception object, inside a catch block. It can only be used inside a catch block.
If a catch block cannot handle the particular exception it has caught, we can rethrow the exception. The rethrow expression causes the originally thrown object to be rethrown.
throw;
all by itself in a catch block re-throws the exception that was just caught. This is useful if you need to (e.g.) perform some cleanup operation in response to an exception, but still allow it to propagate upstack to a place where it can be handled more fully:
catch(...)
{
cleanup();
throw;
}
But you are also perfectly free to do this:
catch(SomeException e)
{
cleanup();
throw SomeOtherException();
}
and in fact it's often convenient to do exactly that in order to translate exceptions thrown by code you call into into whatever types you document that you throw.
The rethrown exception can have a different type. This compiles and runs correctly on VS2012:
#include <iostream>
int main() try
{
try
{
throw 20;
}
catch (int e)
{
std::cout << "An exception occurred. Exception Nr. " << e << std::endl;
throw std::string("abc");
}
}
catch (std::string const & ex)
{
std::cout << "Rethrow different type (string): " << ex << std::endl;
}
Output:
An exception occurred. Exception Nr. 20
Rethrow different type (string): abc
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With