Exceções: obtendo e excluindo exceções
As seguintes instruções e exemplos a seguir mostram como capturar exceções e excluir. Para obter mais informações sobre como try, catch, e as palavras-chave de throw , consulte Manipulação de exceção C++.
Os manipuladores de exceção deverá excluir objetos que manipulam exceção de, porque a falha ao excluir a exceção faz com que um vazamento de memória sempre que o código captura uma exceção.
O bloco de catch deve excluir uma exceção quando:
O bloco de catch gerará uma nova exceção.
Naturalmente, você não deve excluir a exceção se você gerou a mesma exceção novamente:
catch(CException* e) { if (m_bThrowExceptionAgain) throw; // Do not delete e else e->Delete(); }
Retorna a execução de dentro do bloco de catch .
Dica
Ao excluir CException, use a função de membro de Excluir para excluir a exceção.Não use a palavra-chave de delete , pois pode falhar se a exceção não estiver no heap.
Para capturar exceções e excluir
Use a palavra-chave de try para configurar um bloco de try . Executar todas as instruções de programa que possa gerar uma exceção dentro de um bloco de try .
Use a palavra-chave de catch para configurar um bloco de catch . Código de manipulação de exceções gerais de local em um bloco de catch . O código no bloco de catch é executado apenas se o código dentro do bloco de try gerará uma exceção do tipo especificado na instrução de catch .
O esqueleto seguir mostra como try e blocos de catch são organizados normalmente:
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 é gerada, passa de controle ao primeiro bloco de catch cuja exceções gerais declaração corresponde ao tipo da exceção. Você pode controlar seletivamente tipos diferentes de exceções com blocos sequenciais de catch como listados 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: A conversão de macros de exceção MFC.