Domanda

Lo stack di ottenere svolto (distruttori Run) quando si verifica un SIGABRT in C ++?

Grazie.

È stato utile?

Soluzione

Questa risposta indica che i distruttori non vengono chiamati .

Altri suggerimenti

No:

$ 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

No, uniche eccezioni innescano pila di svolgimento. I segnali sono parte di POSIX, che è un'API C, quindi non è "a conoscenza di" strutture C ++, come eccezioni.

La pagina man signal(3) sulla mia casella di Mac OS X, dice

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

, che mi suggerisce che il valore predefinito è di non rilassarsi ...

il SIGABRT segnale viene usato per la fabbricazione file core di esecuzione dell'applicazione po 'di tempo. Noi qualche tempo utilizzare questo segnale per applicazione di debug. E per quanto ne so, non distruttori sono chiamati da questo segnale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top