重複の可能性:
ブロックの外に移動: デストラクタは呼び出されますか?
C と C++ の両方で goto 演算子がほとんどすべての状況で役に立たないことは知っていますが、この質問の答えを興味だけで知りたいのですが、実用的な意味はありません。
C++ 標準は、そのような状況でオブジェクトのデストラクタを適切に呼び出さなければならないことを保証していますか?
#include <iostream>
class Foo
{
public:
Foo() { std::cout << "Foo::Foo() \n"; }
~Foo() { std::cout << "Foo::~Foo() \n"; }
};
int main()
{
{
std::size_t i = 0;
_1:
Foo instance;
if (!++i)
{
goto _1;
}
}
{
Foo instance;
goto _2;
}
_2:
;
}
http://liveworkspace.org/code/06031e6699c8fddda94b8594ccab1387
また、goto と C++ RAII を使用したその他の状況についてはどうでしょうか。
C++ 標準からの引用をここに投稿できれば、本当にクールです。