C++の規格上、対応する例外ハンドラーがないと、std::terminateが呼ばれるわけだが、その状況で、stack unwindingが行われるかどうかは実装依存となっている。
つまり、
struct X { X() ; ~X() ; } ; int main() { try { X x ; throw 0 ; } catch( double ) { } }
このようなコードがあった時、対応する例外ハンドラーが存在しないので、std::terminateが呼ばれるわけだが、xのデストラクターが呼ばれるかどうかは実装依存となる。
へー、勉強になります。
ReplyDeleteC++はKUSOな言語ですね。
でも何でなんだぜ。