Ist der Stapel erhalten abgewickelt, wenn ein SIGABRT auftritt?
-
18-09-2019 - |
Frage
Ist der Stapel erhalten abgewickelt (Destruktoren ausgeführt), wenn ein SIGABRT in C ++ auftritt?
Danke.
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