タグ

ブックマーク / masugata-k.hatenadiary.org (1)

  • C++ で longjmp() 関数を使ってはならない - masugata_kの日記

    longjmp() 関数を使うと C でも例外処理っぽいことができるわけだが、これは、間違っても C++ プログラム中では使ってはならない。まあ、C++ には物の例外処理があるので使うわけもないのだが、C との混合プログラミング*1の際などには注意を要する。 問題は、longjmp() の呼び出しによって消滅するスタック上のオブジェクトのデストラクタが呼ばれない、ということだ。例外送出に伴うスタック巻き戻しではスタック上のオブジェクトが解体されるが、longjmp() にはこれがない。いや、デストラクタが呼び出されないどころか、そもそもそういう事態での C++ プログラムの挙動は不定である: C++ 標準*2 ― 18.7 の 4 The function signature longjmp(jmp_buf jbuf, int val) has more restricted behav

    C++ で longjmp() 関数を使ってはならない - masugata_kの日記
    embedded
    embedded 2014/02/20
    「longjmp() の呼び出しの結果として消滅するスタックにデストラクタが呼び出されるようなオブジェクトがあったら、プログラムの動作がどうなるかは分からないよ」なんでC++の標準ヘッダに<csetjmp>があるんだろ。
  • 1