Question

La pile se dévidé (Destructeurs exécuter) lorsqu'un SIGABRT se produit en C ++?

Merci.

Était-ce utile?

La solution

Cette réponse indique que Destructeurs ne sont pas appelés .

Autres conseils

Non:

$ 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

Non, seules exceptions déclenchent le déroulement pile. Les signaux font partie de POSIX, qui est une API C, il est donc pas « au courant » des installations de C ++, comme des exceptions.

La page de manuel signal(3) sur ma boîte Mac OS X dit

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

qui me porte à croire que la valeur par défaut est de ne pas se détendre ...

SIGABRT le signal est utilisé pour la fabrication de fichier de base de l'application en cours d'exécution un certain temps. Nous utilisons un certain temps ce signal à l'application de débogage. Et pour autant que je sais Destructeurs ne sont pas appelés par ce signal.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top