Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
As instruções e exemplos a seguir mostram como capturar e excluir exceções. Para obter mais informações sobre as palavras-chave try, catch e throw, consulte Práticas recomendadas modernas de C++ para exceções e tratamento de erros.
Os manipuladores de exceção devem excluir os objetos de exceção que manipulam, porque a falha ao excluir a exceção causa um vazamento de memória sempre que esse código deteta uma exceção.
O catch bloqueio deve excluir uma exceção quando:
O
catchbloqueio lança uma nova exceção.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(); }A execução retorna de dentro do bloco
catch.
Observação
Ao excluir um CException, use a função de membro Delete para excluir a exceção. Não utilize a delete palavra-chave, pois esta pode falhar se a exceção não estiver na heap.
Para capturar e excluir exceções
Use a palavra-chave
trypara configurar um blocotry. Execute quaisquer instruções de programa que possam lançar 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 é executado somente se o código dentro dotrybloco lança 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.