Share via


Tente, catch e throw instruções (C++)

Exceções do C++ usam o bloco try, catch e lançam as palavras-chave.

Uma expressão throw sinaliza o erro ou condição de exceção.Você pode usar um objeto de qualquer tipo, como o operando de uma expressão throw.Esse objeto é normalmente usado para transmitir informações sobre o erro.Normalmente, você deve usar a classe std::exception ou uma das classes derivadas que são definidas na biblioteca padrão ou, se nenhum deles forem apropriadas, então derivar sua própria classe de exceção da std::exception.

Um bloco try delimita uma ou mais instruções podem lançar uma exceção.

Um ou mais blocos catch seguem imediatamente um bloco try.Cada bloco catch Especifica o tipo de exceção, que ele pode manipular.

A sintaxe a seguir mostra um exemplo try bloco e seus manipuladores.Suponha que GetNetworkResource() adquire conexão de dados através de uma rede e os tipos de exceção de duas são classes definidas pelo usuário que derivam de std::exception Observe que as exceções são passadas por referência na instrução catch:

MyData md;
try {
   // code that could throw an exception
   md = GetNetworkResource();
}
catch (networkIOException& e) {
   // code that executes when an exception of type
  // networkIOException is thrown in the try block
//…
// Log error message in the exception object.
   cerr << e.what();
}
catch (myDataFormatException& e) {
   // code that handles another exception type
//…
 cerr << e.what();

}

// The following syntax shows a throw expression:

MyData GetNetworkResource()
{
    //...
    if(IOSuccess == false)
        throw networkIOException("Unable to connect");
    //...
    if(readError)
        throw myDataFormatException("Format error"); 
    // ...
}

Comentários

O código após a try cláusula é a seção protegida do código.A expressão lançar (gera) de lança uma exceção.O bloco de código após a catch cláusula é o manipulador de exceção e captura a exceção lançada pela expressão throw se o tipo nas expressões do throw e catch forem compatível de (alças).Para obter uma lista de regras que determinam o tipo correspondente em blocos catch, consulte _____.Se a instrução catch Especifica uma elipse (...) em vez de um tipo, o catch bloco lida com qualquer tipo de exceção, como c e as exceções geradas pelo sistema ou aplicativo com exceções, como proteção de memória, a divisão por zero e violações de ponto flutuante.Como catch blocos são tentados na ordem do programa, como um manipulador deve ser o último manipulador para seu try bloco.Use catch (…) com cuidado; Normalmente, como um bloco catch é usado para registrar erros e executar qualquer limpeza especial antes para interromper a execução do programa.Não permitir que um programa continuar, a menos que o bloco catch sabe como tratar a exceção específica que é detectada.

A throw-expressão com nenhum operando re-throws a exceção atualmente sendo manipulada.Uma expressão como essa deve aparecer apenas em um catch manipulador ou em uma função chamada de dentro de um catch manipulador.O objeto de exceção relançada é o objeto de exceção original (não uma cópia).Por exemplo:

try {
   throw CSomeOtherException();
}
catch(...) {  // Catch all exceptions – dangerous!!!
   // Respond (perhaps only partially) to exception
   throw;       // Pass exception to some other handler
}

Consulte também

Referência

Manipulação de exceção do C++

Palavras-chave C++

Exceções C++ sem tratamento

__uncaught_exception

Outros recursos

Como: tratar exceções em construtores de classe Base (C++)