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:

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

    ReplyDelete

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.