2013-07-03

対応する例外ハンドラーがなくstd::terminateが呼ばれる状況で、stack unwindingが行われるかどうかは実装依存

C++の規格上、対応する例外ハンドラーがないと、std::terminateが呼ばれるわけだが、その状況で、stack unwindingが行われるかどうかは実装依存となっている。

つまり、

struct X
{
    X() ;
    ~X() ;
} ;

int main()
{
    try {
        X x ;
        throw 0 ;
    } catch( double ) { }
}

このようなコードがあった時、対応する例外ハンドラーが存在しないので、std::terminateが呼ばれるわけだが、xのデストラクターが呼ばれるかどうかは実装依存となる。

1 comment:

Anonymous said...

へー、勉強になります。
C++はKUSOな言語ですね。
でも何でなんだぜ。