Excepciones: Detectando 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 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 catch.

[!NOTA]

Al eliminar CException, utilice la función miembro de Eliminar para eliminar la excepción.No utilice la palabra clave de delete , 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 catch.Coloque el código de control de excepciones en un bloque 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 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 al primer bloque catch cuya declaración de excepción coincide con el tipo de la excepción.Puede controlar los diferentes tipos de excepciones con bloques catch secuenciales 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