[C++] Qué son las excepciones.

Iniciado por huchoko, 24 Noviembre 2018, 23:09 PM

0 Miembros y 1 Visitante están viendo este tema.

huchoko

Pues he visto que C++ tiene excepciones (try, catch, throw)
Me sorprende, ya que es un lenguaje compilado y algo antiguo, casi de la edad de C.
Hay una lista de excepciones predefinidas, y algún ejemplo de como usarlas?
Saludos

EdePC

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:

Código (cpp) [Seleccionar]
#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