c++ - 当 SIGABRT 发生时,堆栈会被展开吗?

标签 c++ stack destructor sigabrt

当 C++ 中出现 SIGABRT 时,堆栈是否展开(析构函数运行)?

谢谢。

最佳答案

否:

$ 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++ - 当 SIGABRT 发生时,堆栈会被展开吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1878539/

相关文章:

c++ - 加载的共享库中的类冲突

c++ - 使析构函数不是虚拟的,并在特殊情况下删除基指针是否安全?

c# - IL代码中maxstack值的计算

c - 递归检查C中方程的括号平衡

c++ - 是否可以在不调用析构函数的情况下删除 C++ 中的对象?

C++ enable_if in class - 不同的破坏方式

c++ - 以参数为类指针的虚函数

c++ - 使用 std::accumulate

c# - 有没有一种干净的方法可以将 C# 'params object[]' 构造函数参数转换为 C++ 构造函数?

ruby-on-rails - ruby rails : suggested gems/development stack