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 に答える