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 try
palabras clave , catch
y 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
catch
bloque 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
try
para configurar un bloquetry
. Ejecute cualquier instrucción de programa que pueda producir una excepción dentro de untry
bloque.Use la palabra clave
catch
para configurar un bloquecatch
. Coloque el código de control de excepciones en uncatch
bloque. El código delcatch
bloque solo se ejecuta si el código deltry
bloque produce una excepción del tipo especificado en lacatch
instrucción .El siguiente esqueleto muestra cómo
try
ycatch
los 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
catch
bloque 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 secuencialescatch
como 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.