質問

SIGABRTはC ++で発生したときにスタックが(デストラクタが実行される)巻き戻さを取得していますか?

感謝します。

役に立ちましたか?

解決

この回答には、デストラクタが呼び出されていないことを示しています。

他のヒント

いいえ:

ありません
$ cat test.cc
#include <iostream>
#include <sys/types.h>
#include <signal.h>

class Test {
public:
   ~Test() { std::cout << "~Test called" << std::endl; }
};

int main(int argc, char *argv[])
{
   Test t = Test();
   if (argc > 1) {
      kill(0, SIGABRT);
   }
   return 0;
}
$ g++ test.cc
$ ./a.out
~Test called
$ ./a.out 1
Aborted

いいえ、唯一の例外は、スタックの巻き戻しを誘発します。シグナルは、CのAPIであるPOSIXの一部であるので、このような例外として、C ++の施設「の意識」ではありません。

私のMac OS Xボックスにsignal(3)のmanページには、

と言います
  No    Name         Default Action       Description
...
 6     SIGABRT      create core image    abort program (formerly SIGIOT)

デフォルトでくつろぐないために...

であることを私に示唆しています

信号SIGABRTはいくつかの時間アプリケーションを実行するコア・ファイルを作成するために使用されます。我々はいくつかの時間は、デバッグアプリケーションにこの信号を使用しています。そして、私の知る限りデストラクタがこの信号によって呼び出されていません知っている。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top