Sí, como todos los demás dicen. C++ especifica/exige esto.
Pero sólo para añadir a esto, para lo completo: si su goto
utiliza el computed- goto
extensión se encuentra en algunos compiladores - gcc, sonido metálico, posiblemente otros, pero no incluyendo MSVC última supe - si o no el el destructor del objeto se llamará bastante confuso. Cuando un goto
va a una única ubicación, está muy claro a qué destructores se debe llamar antes de la transferencia del flujo de control. Pero con un goto
calculado, diferentes destructores podrían necesitar ser llamados dinámicamente, para dar la semántica "esperada". No estoy seguro de qué hacen los compiladores que implementan esta extensión, en esos casos. Mi memoria al encontrar esto es que el clang advierte cuando un goto
calculado puede dejar un ámbito con un objeto con un destructor no trival, alegando que no se invocará el destructor. En algunos casos eso podría estar bien, en otros no. No sé de pasada qué hacen los demás compiladores. Solo tenga en cuenta el problema si desea usar goto
s computados en concierto con objetos con destructores no triviales.
¿Por qué necesita saber esto? 'goto' tiene sentido en el código generado, pero de todos modos puede y debe evitar objetos con destructores. – MSalters
@MSalters: eso no tiene sentido, ¿por qué deberías evitar objetos con destructores? –
@Viktor: Permítame expandir la segunda parte de la oración: _En el código generado_, puede y debe evitar objetos con destructores de todos modos. El uso canónico de 'goto' está en el código FSM generado. Aquí los saltos ocurren hacia atrás y hacia adelante, sin tener en cuenta los estados de código de estado que simplemente están en el medio. Los estados de FSM simplemente no son lineales, pero el código de C++ debe serlo. – MSalters