Terminación del programa de biblioteca estándar de C ++

1. El sistema llama a std :: exit () para indicar el final del proceso. Se llama al destructor para el objeto construido (llamar a exit () en un destructor se repetirá infinitamente).

std :: exit (0); Devuelve 0 al sistema, lo que indica que el programa finaliza normalmente.

std :: exit (0); Devuelve 1 al sistema, lo que indica que el programa finaliza de forma anormal.

2. El programa std :: abort () finaliza de forma anormal y no se llamará al destructor:

#define debug qDebug()<<
struct ceshi
{
    ~ceshi()
    {
        debug "ceshi 析构";
    }
};

int main(int argc, char *argv[])
{
    ceshi c;
    std::abort();
    debug "hello";
}

3. El parámetro de std :: atexit (void (* fun) (void)) es un puntero de función, que apunta a una función sin parámetros y sin valor de retorno La función especificada se puede ejecutar antes de la terminación. Se llamará al destructor, y el orden de destrucción es: el post-destructor definido antes de std :: atexit (), y el primer destructor definido después de std :: atexit ():

#define debug qDebug()<<
struct ceshi
{
    ~ceshi()
    {
        debug "ceshi 析构" << a;
    }
    int a;
};

void debugValue()
{
    debug "hello world";
}

int main(int argc, char *argv[])
{
    ceshi c1;
    c1.a = 88;
    std::atexit(debugValue);
    ceshi c2;
    c2.a = 66;

    debug "hello";
}

4. std :: quick_exit () es similar a exit () pero no llama al destructor.

Supongo que te gusta

Origin blog.csdn.net/kenfan1647/article/details/114273708
Recomendado
Clasificación