Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las instrucciones y ejemplos siguientes muestran cómo detectar y eliminar excepciones. Para obtener más información sobre las trypalabras clave , catchy throw , vea Procedimientos recomendados de C++ modernos para excepciones y control de errores.
Los controladores de excepciones deben eliminar los objetos de excepción que controlan, ya que si no se elimina la excepción, se produce una pérdida de memoria cada vez que ese código detecta una excepción.
El catch bloque debe eliminar una excepción cuando:
El
catchbloque produce una nueva excepción.Por supuesto, no debe eliminar la excepción si vuelve a producir la misma excepción:
catch (CException* e) { if (m_bThrowExceptionAgain) throw; // Do not delete e else e->Delete(); }La ejecución regresa desde dentro del bloque
catch.
Nota:
Al eliminar un CException, use la Delete función miembro para eliminar la excepción. No use la palabra clave delete, ya que puede producir un error si la excepción no está en el montón.
Para detectar y eliminar excepciones
Use la palabra clave
trypara configurar un bloquetry. Ejecute cualquier instrucción de programa que pueda producir una excepción dentro de untrybloque.Use la palabra clave
catchpara configurar un bloquecatch. Coloque el código de control de excepciones en uncatchbloque. El código delcatchbloque solo se ejecuta si el código deltrybloque produce una excepción del tipo especificado en lacatchinstrucción .El siguiente esqueleto muestra cómo
tryycatchlos bloques se organizan normalmente:try { // Execute some code that might throw an exception. AfxThrowUserException(); } catch (CException* e) { // Handle the exception here. // "e" contains information about the exception. e->Delete(); }Cuando se produce una excepción, el control pasa al primer
catchbloque cuya declaración de excepción coincide con el tipo de la excepción. Puede controlar de forma selectiva diferentes tipos de excepciones con bloques secuencialescatchcomo se muestra a continuación:try { // Execute some code that might throw an exception. AfxThrowUserException(); } catch (CMemoryException* e) { // Handle the out-of-memory exception here. e->Delete(); } catch (CFileException* e) { // Handle the file exceptions here. e->Delete(); } catch (CException* e) { // Handle all other types of exceptions here. e->Delete(); }
Para obtener más información, vea Excepciones: Conversión de macros de excepciones de MFC.