나는 소멸자가 스택의 정상적인 풀림과 예외가 발생할 때 호출되지만, exit()가 호출 될 때는 그렇지 않다는 것을 알고있다.어떤 상황에서 C++ 소멸자가 호출되지 않을까요?
소멸자가 불려 가지 않을 경우가 있습니까? SIGINT 나 SIGSEGV 같은 시그널은 어떨까요? 나는 SIGSEGV의 경우 호출되지 않는다고 추측하지만 SIGNINT의 경우 어떤 신호가 스택을 풀어 낼지 어떻게 알 수 있습니까?
전화를 걸지 않는 다른 상황이 있습니까?
, 당신은 또한 알고 있어야 소멸자 때 호출되지 않습니다 전원 플러그가 당겨집니다;). –
기본 동작을 무시하는 신호 처리기를 설치하지 않으면 SIGINT가 스택을 unwind하지 않습니다. 기본적으로 SIGINT는 프로그램을 즉시 종료시킵니다. – karunski
질문에 대한 감독과 같아서 대답으로 게시하지 마십시오. 소멸자는 정적, 자동 또는 스레드 저장 기간을 가진 객체의 수명이 끝날 때 자동으로 (정상적인 상황에서) 호출됩니다. ** 동적 ** 저장 기간을 가진 객체의 경우 소멸자는 객체에 대한 포인터에서'delete'가 호출 될 때만 호출됩니다. 따라서 소멸자는'delete'가 호출되지 않는 동적 객체 (메모리 누수가 이것을 불가능하게 만들거나 감시에 의해 만들지 않아도)를 위해 호출되지 않을 것입니다. –