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 (ジャンプ ステートメント):
スコープから出ると (どのように実行されても)、そのスコープで宣言された自動ストレージ期間を持つすべての構築済みオブジェクトに対して、宣言の逆の順序でデストラクタが呼び出されます。