Обработка исключений в C ++ ограничена попыткой / throw / catch. В отличие от Object Pascal, Java, C # и Python, даже в C ++ 11 finally
конструкция не была реализована.
Я видел очень много литературы по С ++, обсуждающей «код, исключающий исключение». Липпман пишет, что безопасный код исключений - это важная, но сложная и трудная тема, выходящая за рамки его учебника, из которого следует, что безопасный код не является фундаментальным для C ++. Херб Саттер посвящает 10 глав этой теме в своем «Исключительном C ++»!
Тем не менее, мне кажется, что многие проблемы, возникающие при попытке написать «безопасный код для исключения», могли бы быть достаточно хорошо решены, если бы finally
была реализована конструкция, позволяющая программисту гарантировать, что даже в случае исключения программа может быть восстановлена. в безопасное, стабильное состояние без утечек, близкое к точке выделения ресурсов и потенциально проблемного кода. Как очень опытный программист на Delphi и C #, я использую try ... finally довольно широко блокирует мой код, как и большинство программистов на этих языках.
Рассматривая все «навороты», реализованные в C ++ 11, я был удивлен, обнаружив, что «наконец-то» все еще не было.
Итак, почему finally
конструкция никогда не была реализована в C ++? Это действительно не очень сложная или продвинутая концепция для понимания, и она помогает программисту писать «безопасный для исключений код».
finally
C ++, и какие методы обработки исключений используются вместо него?» действительно и по теме для этого сайта. Думаю, существующие ответы хорошо это освещают. Превращая это в дискуссию на тему «Есть ли причины, по которым дизайнеры C ++ не включают в себя finally
смысл?» и "Должен finally
быть добавлен в C ++?" и ведение дискуссии через комментарии по вопросу, и каждый ответ не соответствует модели этого сайта вопросов и ответов.