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çã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.