可能重复:
转到块外:是否调用析构函数?
我知道 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 的其他 stange 情况呢?
如果您可以在此处发布 C++ 标准的引用,那将是非常酷的。