Aunque esta pregunta es bastante antigua y ya se ha respondido mucho, solo quiero agregar una nota sobre cómo hacer un manejo adecuado de excepciones en C ++ 11, ya que continuamente me falta esto en las discusiones sobre excepciones:
Se describe en StackOverflow aquí y aquí , cómo puede obtener un seguimiento de sus excepciones dentro de su código sin necesidad de un depurador o un registro engorroso, simplemente escribiendo un controlador de excepciones adecuado que volverá a generar excepciones anidadas.
Dado que puede hacer esto con cualquier clase de excepción derivada, ¡puede agregar mucha información a dicho seguimiento! También puede echar un vistazo a mi MWE en GitHub , donde un backtrace se vería así:
Library API: Exception caught in function 'api_function'
Backtrace:
~/Git/mwe-cpp-exception/src/detail/Library.cpp:17 : library_function failed
~/Git/mwe-cpp-exception/src/detail/Library.cpp:13 : could not open file "nonexistent.txt"
Ni siquiera necesita crear una subclase std::runtime_error
para obtener mucha información cuando se lanza una excepción.
El único beneficio que veo en la subclasificación (en lugar de solo usar std::runtime_error
) es que su controlador de excepciones puede detectar su excepción personalizada y hacer algo especial. Por ejemplo:
try
{
// something that may throw
}
catch( const MyException & ex )
{
// do something specialized with the
// additional info inside MyException
}
catch( const std::exception & ex )
{
std::cerr << ex.what() << std::endl;
}
catch( ... )
{
std::cerr << "unknown exception!" << std::endl;
}