C ++ Не поддерживает finally для управления последними вещами в конце блока.
Что произойдет, если функция C сгенерирует исключение, она вернется из функции. Это означает, что все локальные переменные будут уничтожены.
Затем программа вернется к коду в B , проверит наличие блока перехвата, увидит, что его нет, и вернется к функции A. И снова все локальные переменные в B будут освобождены.
Вы должны помнить, что вы работаете в C ++ .... Вы должны управлять своими объектами. Так что если у вас есть объекты, которые просто интересуются свободно в B (с указателями или чем-то еще), то это плохой дизайн кода, и они не будут выпущены.
Если в B вы знаете, что в C может быть исключение, вы можете просто поставить там ловушку и затем отбросить пойманную исключительную ситуацию.
Ближайший к блоку finally
вы можете использовать catch(...)
и использовать его для освобождения памяти ... но он будет введен, только если действительно было исключение, поэтому он не идентичен finally
try {
}
catch(...) {
// free stuff affected by an exception here
}
Если вы хотите работать точно так же, как блок finally
, вы можете сделать:
try {
//Do stuff
goto finally
}
catch(...) {
finally:
// free stuff affected by an exception here
}
Для всех вас, у которых есть проблема с goto
... это по-прежнему команда, и это прекрасный пример того, что ни break
, ни continue
, ни какая-либо встроенная функция не может заменить goto
.
Еще немного о Перейти