18

此代码导致未定义的行为:


void some_func() {
  goto undefined;
  {
    T x = T();
    undefined:
  }
}

构造函数没有被调用。

但是这段代码呢?x 的析构函数会被调用吗?我想会的,但我想确定一下。:)


void some_func() {
  {
    T x = T();
    goto out;
  }
  out:
}
4

1 回答 1

44

是的,析构函数将按预期调用,就像您因异常而提前退出范围一样。

标准 6.6/2(跳转语句):

在退出作用域时(无论如何完成),对于在该作用域中声明的所有具有自动存储持续时间的构造对象,将按照其声明的相反顺序调用析构函数。

于 2008-12-02T17:35:21.217 回答