Compartir a través de


Excepciones: Detectar y eliminar excepciones

Las instrucciones y los ejemplos siguientes muestran cómo detectar y eliminar excepciones. Para obtener más información sobre try, catch, y las palabras clave de throw , vea Control de excepciones de C++.

Los controladores de excepciones deben eliminar objetos de excepción que controlan, porque el error eliminar la excepción se produce una pérdida de memoria siempre que ese código detecte una excepción.

El bloque de catch debe eliminar una excepción cuando:

  • El bloque de catch produce una nueva excepción.

    Por supuesto, no debe eliminar la excepción si se produce la misma excepción de nuevo:

    catch(CException* e)
    {
       if (m_bThrowExceptionAgain)
          throw; // Do not delete e 
       else 
          e->Delete();
    }
    
  • La ejecución vuelve dentro del bloque de catch .

Nota

Al eliminar CException, utilice la función miembro de Suprimir para eliminar la excepción.No utilice la palabra clave de borrar , porque puede fallar si la excepción no está en la pila.

Para detectar y eliminar excepciones

  • Utilice la palabra clave de try para configurar un bloque de try . Ejecute las instrucciones del programa que podría producir una excepción dentro de un bloque de try .

    Utilice la palabra clave de catch para configurar un bloque de catch . Coloque el código de control de excepciones en un bloque de catch . El código del bloque de catch sólo se ejecuta si el código del bloque de try produce una excepción del tipo especificado en la instrucción de catch .

    El esquema siguiente muestra cómo try y bloques de catch 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 a primer catch bloqueado cuya coincide con excepción- declaración el tipo de la excepción. Puede controlar los diferentes tipos de excepciones con bloques secuenciales de catch como se indica 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: El desarrollo de las macros MFC Exception.

Vea también

Conceptos

Control de excepciones en MFC