Один из моих друзей поднял мне эту проблему. Я застрял, потому что не разбираюсь в исключениях. Имейте в виду, что мы оба работаем в рабочей среде, где мы используем C ++, но обрабатываем ошибки в традициях C. Его проблема была примерно такой:
Функция A
вызывает B
, который, в свою очередь, вызывает C
. Исключение создается из C
, а блок перехвата для этого исключения находится в A
. Что происходит с ресурсами, полученными в B
до вызова C
? Как мы их убираем? Мой ответ - использовать RAII. Но даже когда я сказал это, я знал, что это не сработает. У нас есть огромные кодовые базы, написанные в режиме C. Нигде в коде я не видел автоматических указателей и тому подобного. Ресурсы не обязательно заключены в классы. Даже если они есть, деструкторы в большинстве случаев оставляются на усмотрение компилятора. Короче говоря, все делается вручную.
Настоящая проблема в том, что делать, чтобы перейти от обработки ошибок C к исключениям с весом огромной базы кода? Проблема, которую задал мой друг, - это лишь один из возможных вопросов, которые могут возникнуть, если вы уже знакомы с обработкой ошибок C и хотите знать, как может происходить переход оттуда к исключениям.