Frage

Ist der Stapel erhalten abgewickelt (Destruktoren ausgeführt), wenn ein SIGABRT in C ++ auftritt?

Danke.

War es hilfreich?

Lösung

Diese Antwort dass Destruktoren nicht aufgerufen zeigt .

Andere Tipps

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

Nein, nur Ausnahmen auslösen Stack Abwickeln. Die Signale sind Teil von POSIX, die ein C-API ist, so ist es nicht „bewusst“ C ++ Einrichtungen wie Ausnahmen.

Die signal(3) man-Seite auf meinem Mac OS X-Box sagt

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

, die mir nahe, dass die standardmäßig nicht entspannen ist ...

das Signal SIGABRT wird zur Herstellung von Kern-Datei der laufenden Anwendung einiger Zeit verwendet. Wir einige Zeit, um dieses Signal zu Debug-Anwendung verwenden. Und soweit ich weiß, Destruktoren nicht durch dieses Signal bezeichnet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top