Saludos,
- Básicamente, las excepciones son en realidad errores durante la ejecución. Si uno de esos errores se produce y no implementamos el manejo de excepciones, el programa sencillamente terminará abruptamente. Es muy probable que si hay ficheros abiertos no se guarde el contenido de los buffers, ni se cierren, además ciertos objetos no serán destruidos, y se producirán fugas de memoria.
- En programas pequeños podemos prever las situaciones en que se pueden producir excepciones y evitarlos. Las excepciones más habituales son las de peticiones de memoria fallidas.
- Los tipos de la expresión del
throw y el especificado en el
catch deben coincidir, o bien, el tipo del
catch debe ser una clase base de la expresión del
throw. La concordancia de tipos es muy estricta, por ejemplo, no se considera como el mismo tipo
int que
unsigned int.
- Si no se encontrase ningún
catch adecuado, se abandona el programa, del mismo modo que si se produce una excepción y no hemos hecho ningún tipo de manipulación de excepciones. Los objetos locales no se destruyen, etc.
- Para evitar eso existe un
catch general, que captura cualquier
throw para el que no exista un
catch concreto:
#include <iostream>
using namespace std;
int main() {
try {
throw 'x'; // Intencionalmente provoca una excepción tipo char
}
catch(int c) { // No coincide el tipo
cout << "El valor de c es: " << c << endl;
}
catch(char c) { // Coincide y captura la excepción
cout << "El valor de c es: " << c << endl;
}
catch(...) { // Si todo lo anterior falla, se captura aquí
cout << "Excepción imprevista" << endl;
}
return 0;
}
-- Referencias:
https://openlibra.com/es/book/resolviendo-problemas-con-el-lenguaje-de-programacion-c