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