goto and Destructors in GNU C++
In C++ programs, you can safely use the goto statement. When you
use it to exit a block which contains aggregates requiring destructors,
the destructors will run before the goto transfers control. (In
ANSI C++, goto is restricted to targets within the current
block.)
The compiler still forbids using goto to enter a scope
that requires constructors.