Выполнял Java в течение нескольких лет, поэтому не отслеживал С++. Добавлен ли параметр finally в обработку исключений С++ в определении языка?
Есть ли предпочтительная идиома, которая имитирует Java try/finally?
Am также беспокоился о том, что С++ не имеет высшего супер-типа для всех возможных исключений, которые могут быть выбраны как класс Java Throwable.
Я могу написать:
try {
// do something
} catch(...) {
// alas, can't examine the exception
// can only do cleanup code and perhaps rethrow, ala:
throw;
}
ADDENDUM EDIT:
Я закончил тем, что принял ответ, который имели самые высокие голоса, то есть использовать деструкторы для очистки. Конечно, из моих собственных комментариев, ясно, что я не согласны с этим. Однако С++ - это то, что есть, и поэтому в приложение, которое у меня есть ум, я собираюсь более или менее стремиться придерживаться общего сообщества практика. Я буду использовать классы шаблонов для обернуть ресурсы, которые еще не деструктор класса (т.е. библиотека C ресурсы), тем самым отдавая им семантика деструктора.
NEW ADDENDUM EDIT:
Хмм, вместо наконец, тогда замыкание возможно, функция? Закрытие в сочетании с Подход ScopeGuard (см. Один из ответы ниже) будет способом выполнить очистку с произвольными действия и доступ к очистке контекст внешней области кода. Очистка может выполняться в стиле идиомы, который рассматривается в программировании Ruby, где они поставляют блоки очистки при открытии ресурса. Это не функция закрытия, рассматриваемая для С++?