G++ and excemtion
Laurent Marzullo
laurent@marzu.org
Thu Jul 5 14:44:00 GMT 2007
Hello,
Here a little program.
#include <iostream>
class ErrorBase {}
class Error : public ErrorBase {}
void
throw_exception( const ErrorBase& excp )
{
throw excp;
}
void
function( void )
{
Error a;
throw_exception( a );
}
int
main( void )
{
try
{
function();
}
catch ( const Error& err )
{
std::cerr << "Error\n";
}
catch ( const ErrorBase& err )
{
std::cerr << "ErrorBase\n";
}
catch ( ... )
{
std::cerr << "Unknown exception !\n";
}
}
This program call a function which throw an exception of type 'Error' (which
inherite from 'ErrorBase').
But the catch bloc only catch ErrorBase exception and not Error ?
Is it a normal behavior ?
I know that there's a copy of the object when a throw occur but is it not a copy
of the real type of the object that must happen ?
I want my function throw_exception to throw the real type of the object passed
as parameter. How may I achieve this ?
May I dynamic_cast to all possible exception that must be passed to
throw_exception as:
if ( dynamic_cast<const Error*>( &excp ) != 0 )
throw Error();
else
throw excp;
Any hint, help ??
Thanks a lot.
Regards
+--------------------+
+ Laurent Marzullo
+
More information about the Gcc-help
mailing list