문제

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 ++ 시설을 "인식하지 않습니다.

그만큼 signal(3) 내 MAC OS X 박스의 Man Page가 말합니다

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

그것은 기본값이 긴장을 풀지 않는다는 것을 나에게 제안합니다 ...

신호 SIGABRT는 시간에 실행중인 핵심 파일을 만드는 데 사용됩니다. 우리는이 신호를 사용하여 응용 프로그램을 디버그합니다. 그리고 내가 아는 한이 신호는 소멸자가 호출되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top