是否堆得到退绕(析构函数运行)当发出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用于制造运行的应用程序的一些时间的核心文件。我们一些时间使用这个信号来调试应用程序。而据我所知,析构函数没有被这个信号被调用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top