此代码会导致未定义的行为:
void some_func() {
goto undefined;
{
T x = T();
undefined:
}
}
未调用构造函数。
但是这段代码是怎么回事?会调用x的析构函数吗?我想会的,但我想确定一下。:)
void some_func() {
{
T x = T();
goto out;
}
out:
}
发布于 2008-12-02 17:35:21
是的,析构函数会像预期的那样被调用,就像你因为一个异常而提前退出作用域一样。
标准6.6/2 (跳转语句):
退出作用域时(无论如何完成),将为在该作用域中声明的具有自动存储持续时间的所有构造对象调用析构函数,其顺序与其声明的顺序相反。
https://stackoverflow.com/questions/334780
复制相似问题