Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: huchoko en 24 Noviembre 2018, 23:09 pm



Título: [C++] Qué son las excepciones.
Publicado por: huchoko en 24 Noviembre 2018, 23:09 pm
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


Título: Re: [C++] Qué son las excepciones.
Publicado por: EdePC en 25 Noviembre 2018, 02:11 am
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
  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4.  try {
  5.    throw 'x'; // Intencionalmente provoca una excepción tipo char
  6.  }
  7.  catch(int c) { // No coincide el tipo
  8.    cout << "El valor de c es: " << c << endl;
  9.  }
  10.  catch(char c) { // Coincide y captura la excepción
  11.    cout << "El valor de c es: " << c << endl;
  12.  }
  13.  catch(...) { // Si todo lo anterior falla, se captura aquí
  14.    cout << "Excepción imprevista" << endl;
  15.  }
  16.  return 0;
  17. }

-- Referencias: https://openlibra.com/es/book/resolviendo-problemas-con-el-lenguaje-de-programacion-c