Возможный дубликат:
Перейти к вне блока: вызываются ли деструкторы?
Я знаю, что оператор goto как в C, так и в 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++.
goto
кстати не оператор. - person chris   schedule 28.08.2012goto
не бесполезен, а необходим. - person Kerrek SB   schedule 28.08.2012goto
переменные утечки? - person Benjamin Lindley   schedule 28.08.2012