2009-12-10 61 views

回答

0

signal(3)手册页上我的Mac OS X盒说

No Name   Default Action  Description 
... 
6  SIGABRT  create core image abort program (formerly SIGIOT) 

这表明,我认为默认是不放松......

1

不,只有异常触发堆栈展开。信号是POSIX的一部分,它是一个C API,所以它不会“意识到”C++设施,例如异常。

4

号:

$ 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 
0

信号SIGABRT用于制造运行的应用程序一段时间的核心文件。我们有时候会使用这个信号来调试应用程序。而据我所知,析构函数不被这个信号调用。