Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
As instruções e exemplos a seguir mostram como capturar e excluir exceções. Para mais informações sobre as palavras-chave try, catch e throw, consulte Modern C++ best practices for exceptions and error handling.
Os manipuladores de exceção devem excluir os objetos de exceção que eles manipulam, pois a falha ao excluir a exceção causa um vazamento de memória sempre que esse código captura uma exceção.
Seu catch bloco deve excluir uma exceção quando:
O
catchbloco gera uma nova exceção.É claro que você não deve excluir a exceção se lançar a mesma exceção novamente:
catch (CException* e) { if (m_bThrowExceptionAgain) throw; // Do not delete e else e->Delete(); }A execução retorna de dentro do bloco
catch.
Observação
Ao excluir um CException, use a função membro Delete para excluir a exceção. Não use a delete palavra-chave, pois ela pode falhar se a exceção não estiver no heap.
Para capturar e excluir exceções
Use a palavra-chave
trypara configurar um blocotry. Execute qualquer instrução de programa que possa gerar uma exceção dentro de umtrybloco.Use a palavra-chave
catchpara configurar um blococatch. Coloque o código de tratamento de exceções em umcatchbloco. O código nocatchbloco será executado somente se o código dentro dotrybloco gerar uma exceção do tipo especificado nacatchinstrução.O esqueleto a seguir mostra como
tryecatchos 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
catchbloco cuja declaração de exceção corresponde ao tipo da exceção. Você pode lidar seletivamente com diferentes tipos de exceções com blocos sequenciaiscatch, 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: convertendo de macros de exceção MFC.