|
try { |
|
worker.start(); |
|
} catch (std::invalid_argument& e) { |
|
std::cerr << e.what() << std::endl; |
|
} catch (...) { |
|
std::cerr << GENERIC_ERROR << std::endl; |
|
} |
try {
worker.start();
} catch (std::exception& e) {
std::cerr << e.what() << std::endl;
} catch (...) {
std::cerr << GENERIC_ERROR << std::endl;
}
De esta forma, si se lanza la excepción std::invalid_argument que usás vos, va a ser catcheada en el catch de std::exception (porque std::invalid_argument hereda de std::exception) y además, cualquier excepción que alguna de las funciones de la STL lance, las vas a catchear e imprimir el mensaje correspondiente para ayudarte a vos como programador a debuggear tu programa.
De la forma que estabas haciendo vos, si por algún descuido, por ejemplo, indexaras al vector de clientes con un indice mayor a su tamaño, tendrías un out_of_range_exception. Como tus catchs solo catchean un std::invalid_argument y todo lo que herede de él, la excepción de out_of_range la va a atrapar las elispsis, y el mensaje de error no lo vas a poder ver y el debugging se va a transformar en una tarea tediosa.
TP3-9508/client_src/client_main.cpp
Lines 15 to 21 in 34f95ac
De esta forma, si se lanza la excepción
std::invalid_argumentque usás vos, va a ser catcheada en el catch destd::exception(porque std::invalid_argument hereda de std::exception) y además, cualquier excepción que alguna de las funciones de la STL lance, las vas a catchear e imprimir el mensaje correspondiente para ayudarte a vos como programador a debuggear tu programa.De la forma que estabas haciendo vos, si por algún descuido, por ejemplo, indexaras al vector de clientes con un indice mayor a su tamaño, tendrías un out_of_range_exception. Como tus catchs solo catchean un
std::invalid_argumenty todo lo que herede de él, la excepción de out_of_range la va a atrapar las elispsis, y el mensaje de error no lo vas a poder ver y el debugging se va a transformar en una tarea tediosa.