Exceções: Captura e excluindo exceções

As instruções e exemplos a seguir mostram como detectar e eliminar exceções.Para obter mais informações sobre o Tente, catch, and throw palavras-chave, consulte Manipulação de exceção do C++.

Os manipuladores de exceção devem excluir objetos exception tratam, como Falha ao excluir a exceção causa um perda de memória sempre que esse código detecta uma exceção.

O catch bloco deve excluir uma exceção quando:

  • The catch bloco lança uma exceção de nova.

    Obviamente, não é necessário excluir a exceção se você lançar novamente a mesma exceção:

    catch(CException* e)
    {
       if (m_bThrowExceptionAgain)
          throw; // Do not delete e
       else 
          e->Delete();
    }
    
  • Execução retorna de dentro de catch bloco.

Observação:

Ao excluir uma CException, use o Excluirfunção de membro para remover a exceção.Não use o Excluir palavra-chave, porque ele pode falhar se a exceção não está na pilha.

Para detectar e excluir exceções

  • Use o Tente palavra-chave para conjunto até um Tente bloco.Executar instruções qualquer programa que podem lançar uma exceção dentro de um Tente bloco.

    Use o catch palavra-chave para configurar um catch bloco.Coloque o código de manipulação de exceção em um catch bloco.O código a catch bloco é executado somente se o código dentro de Tente bloco lança uma exceção do tipo especificado no catch demonstrativo.

    Mostra o seguinte esqueleto como Tente and catch blocos normalmente são organizados:

    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();
    }
    

    Quando uma exceção é lançada, passa o controle para o primeiro catch bloco cuja declaração exceção corresponde ao tipo de exceção.Você pode manipular seletivamente diferentes tipos de exceções com seqüencial catch blocos listados a seguir:

    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 obter mais informações, consulte Exceções: Convertendo do MFC exceção Macros.

Consulte também

Conceitos

Exceção Handling in MFC