Pregunta

¿La pila llegar desenrollado (destructores de ejecución) cuando se produce un SIGABRT en C ++?

Gracias.

¿Fue útil?

Solución

Esta respuesta indica que los destructores no son llamados .

Otros consejos

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, únicas excepciones desencadenan pila desenrollar. Las señales son parte de POSIX, que es una API de C, así que no es "consciente de las" instalaciones de C ++, tales como excepciones.

La página del manual signal(3) en mi caja de Mac OS X dice

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

lo que me hace pensar que el valor por defecto es no descansar ...

SIGABRT la señal se utiliza para la fabricación de archivo de base de aplicación en ejecución algún tiempo. Nosotros utilizamos algún tiempo esta señal a la aplicación de depuración. Y por lo que yo sé, no destructores son llamados por esta señal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top