++ de programação C: lançamento de exceções

A função C ++ que aloca recursos localmente pode precisar capturar uma exceção, fazer algum processamento e, em seguida, relançar-lo da cadeia de pilha. Considere o seguinte exemplo:

anular fileFunc () {ofstream * Pout = new ofstream ( "arquivo.txt") - otherFunction () - eliminar pOut-}

Como muitos programadores sabem, a memória alocada pelo novo isn # 8242-t voltou para a pilha automaticamente. E se otherFunction () foram para lançar uma exceção, o controle seria sair do programa sem invocar excluir, e a memória alocada no início fileFunc () seria perdida.

Para evitar este problema, fileFunc () pode incluir um pegar(...) para capturar qualquer exceção lançada:

anular fileFunc () {ofstream * Pout = new ofstream ( "arquivo.txt") - try {otherFunction () - eliminar pOut-} catch (...) {excluir Pout-throw-}}

Dentro desta frase, fileFunc () retorna a memória que ele alocado anteriormente para a pilha. No entanto, não está em uma posição para processar o restante da exceção porque ele não tem idéia do que poderia ter dado errado. Ele ainda não sabe que tipo de objeto que ele acabou de pegar.

o lançar palavra-chave sem nenhum argumento relança o objeto exceção atual de volta até a cadeia para alguma função que pode processar adequadamente o erro.

menu