Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
此代码导致未定义的行为:
void some_func() { goto undefined; { T x = T(); undefined: } }
构造函数没有被调用。
但是这段代码呢?x 的析构函数会被调用吗?我想会的,但我想确定一下。:)
void some_func() { { T x = T(); goto out; } out: }
是的,析构函数将按预期调用,就像您因异常而提前退出范围一样。
标准 6.6/2(跳转语句):
在退出作用域时(无论如何完成),对于在该作用域中声明的所有具有自动存储持续时间的构造对象,将按照其声明的相反顺序调用析构函数。