O tratamento de exceções em C ++ é limitado a tentativa / lançamento / captura. Diferentemente do Object Pascal, Java, C # e Python, mesmo no C ++ 11, a finally
construção não foi implementada.
Tenho visto muita literatura C ++ discutindo "código de exceção seguro". Lippman escreve que o código seguro de exceção é um tópico importante, mas avançado e difícil, além do escopo de seu Primer - o que parece implicar que o código seguro não é fundamental para o C ++. Herb Sutter dedica 10 capítulos ao tópico em seu Excepcional C ++!
No entanto, parece-me que muitos dos problemas encontrados ao tentar escrever "código de exceção seguro" poderiam ser bem resolvidos se a finally
construção fosse implementada, permitindo ao programador garantir que, mesmo no caso de uma exceção, o programa possa ser restaurado para um estado seguro, estável e sem vazamentos, próximo ao ponto de alocação de recursos e código potencialmente problemático. Como um programador experiente em Delphi e C #, uso try .. finalmente bloqueia bastante o código, assim como a maioria dos programadores nessas linguagens.
Considerando todos os 'sinos e assobios' implementados no C ++ 11, fiquei surpreso ao descobrir que 'finalmente' ainda não estava lá.
Então, por que a finally
construção nunca foi implementada em C ++? Não é realmente um conceito muito difícil ou avançado de entender e ajuda bastante o programador a escrever 'código seguro de exceção'.
finally
no C ++ e quais técnicas para tratamento de exceções são usadas em seu lugar?" é válido e específico para este site. As respostas existentes cobrem isso muito bem, eu acho. Transformando-o em uma discussão sobre "Os motivos dos designers de C ++ para não incluirem finally
vale a pena?" e "Deve finally
ser adicionado ao C ++?" e continuando a discussão nos comentários sobre a pergunta e todas as respostas não se encaixam no modelo deste site de perguntas e respostas.