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
}