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.