Vídeo: Lista encadeada com C++ 2024
Uma função C ++ que aloca recursos localmente pode precisar capturar uma exceção, fazer algum processamento e, em seguida, reencarar a cadeia de pilha. Considere o seguinte exemplo:
void fileFunc () {ofstream * pOut = new ofstream ("File. Txt"); otherFunction (); delete pOut;}
Como muitos programadores sabem, a memória alocada por novo não é devolvida ao heap automaticamente. Se otherFunction () devesse lançar uma exceção, o controle iria sair do programa sem invocar delete, e a memória alocada no início do arquivoFunc () seria perdida.
Para evitar esse problema, fileFunc () pode incluir uma captura (…) para capturar qualquer exceção jogada:
void fileFunc () {ofstream * pOut = new ofstream ("Arquivo. Txt"); tente {otherFunction (); apagar pOut;} catch (…) {delete pOut; throw;}}
Nesta frase, fileFunc () retorna a memória que alocou anteriormente para o heap. No entanto, não está em condições de processar o restante da exceção porque não tem idéia do que poderia ter dado errado. Nem sabe o tipo de objeto que acabou de capturar.
A palavra-chave throw sem argumentos recua o objeto de exceção atual, faz backup da cadeia em algumas funções que podem processar corretamente o erro.