Compartir a través de


Excepciones: Detectar y eliminar excepciones

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 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

  1. Use la palabra clave try para configurar un bloque try. Ejecute cualquier instrucción de programa que pueda producir una excepción dentro de un try bloque.

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

    El siguiente esqueleto muestra cómo try y catch 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 secuenciales catch 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.

Consulte también

Manejo de Excepciones