Да, как все говорят. C ++ определяет / предписывает это.
Но для полноты изложения добавим: если ваше goto
использует вычисленное расширение goto
, найденное в некоторых компиляторах - gcc, clang, возможно, в других, но не , включая MSVC, последний раз знал - будет ли вызван деструктор объекта, довольно туманно. Когда goto
идет в одно место, очень ясно, какие деструкторы должны быть вызваны перед передачей потока управления. Но с вычисленным goto
могут потребоваться динамические вызовы различных деструкторов, чтобы получить «ожидаемую» семантику. Я не уверен, что делают компиляторы, которые реализуют это расширение, в этих случаях. Я вспомнил, что столкнулся с этим, что clang предупреждает, когда вычисленная goto
может оставить область действия с объектом с нетривальным деструктором, утверждая, что деструктор не будет вызван. В некоторых случаях это может быть хорошо, в других нет. Я не знаю, что делают другие компиляторы. Просто знайте о проблеме, если вы хотите использовать вычисленные goto
s совместно с объектами с нетривиальными деструкторами.