Será que a pilha obter desenrolado quando um SIGABRT ocorre?
-
18-09-2019 - |
Pergunta
A pilha obter desenrolado (destruidores executar) quando um SIGABRT ocorre em C ++?
Graças.
Solução
Esta resposta indica que destruidores não são chamados .
Outras dicas
Não:
$ 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
Não, únicas exceções provocam pilha relaxar. Os sinais são parte de POSIX, que é uma API C, por isso não é "consciente de" instalações C ++ como exceções.
A página man signal(3)
na minha caixa de Mac OS X diz
No Name Default Action Description
...
6 SIGABRT create core image abort program (formerly SIGIOT)
que me sugere que o padrão é não relaxar ...
o SIGABRT sinal é usado para fazer arquivo core de execução da aplicação de algum tempo. Nós algum tempo usar este sinal para aplicação de depuração. E, tanto quanto eu sei Destructors não são chamados por este sinal.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow