请问堆得到解开当SIGABRT发生?
-
18-09-2019 - |
题
是否堆得到退绕(析构函数运行)当发出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
没有,唯一的例外触发堆栈展开。信号是POSIX,这是一个C API的一部分,所以它不是“知道” C ++设施如异常。
在我的Mac OS X框signal(3)
手册页说:
No Name Default Action Description
...
6 SIGABRT create core image abort program (formerly SIGIOT)
这表明对我来说,缺省设置为不放松...
信号SIGABRT用于制造运行的应用程序的一些时间的核心文件。我们一些时间使用这个信号来调试应用程序。而据我所知,析构函数没有被这个信号被调用。
不隶属于 StackOverflow