Compartilhar via


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

As instruções e os exemplos a seguir mostram como detectar e excluir exceções.Para obter mais informações sobre o tente, catch, e throw palavras-chave, consulte O tratamento de exceção de C++.

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

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

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

    Claro, você não deve excluir a exceção se você lançar a mesma exceção novamente:

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

ObservaçãoObservação

Ao excluir um CException, use o Excluir função de membro para excluir a exceção.Não use o Excluir palavra-chave, pois ele pode falhar se a exceção não estiver na pilha.

Detectar e excluir exceções

  • Use o tente palavra-chave para configurar um tente bloco.Executar quaisquer instruções de 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 a tente bloco lança uma exceção do tipo especificado no catch instrução.

    Mostra o esqueleto seguir como tente e catch blocos são normalmente 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, o controle passa para o primeiro catch bloco cuja declaração de exceção corresponde ao tipo de exceção.Você pode manipular seletivamente diferentes tipos de exceções com seqüencial catch bloqueia conforme listado abaixo:

    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: conversão de Macros de exceção MFC.

Consulte também

Conceitos

Tratamento de exceção no MFC