goto和析构函数是否兼容?

时间:2008-12-02 17:33:55

标签: c++ goto

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


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

未调用构造函数。

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


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

1 个答案:

答案 0 :(得分:43)

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

标准6.6 / 2(跳转声明):

  

在退出范围(无论多么已完成)时,将为所有具有自动存储持续时间的构造对象调用析构函数,这些对象在该范围内声明,与其声明的顺序相反。