GCC деструктор поведения - PullRequest
6 голосов
/ 25 мая 2010

Я заметил разницу в поведении деструктора gcc при компиляции под linux и кросс-компиляции с mingw .

В linux деструктор не будет вызван, пока программа не завершит свою работу нормально (возвращается из main). Я думаю, что это имеет смысл, если принять во внимание обработчики сигналов.

Однако в Win32 деструктор вызывается, если выполнение программы завершается, скажем, CTRL-C, но не при его уничтожении из диспетчера задач.

Почему это? И что бы вы предложили, чтобы деструктор вызывался независимо от того, как завершается процесс - в частности, на Win32?

Пример кода:

#include <stdio.h>

int main(int argc, char **argv) {
        printf("main\n");
        while(1) {}
    return 0;
}

__attribute__((destructor)) static void mydestructor(void) {
        printf("destructor\n");
}

1 Ответ

5 голосов
/ 25 мая 2010

Уничтожение из диспетчера процессов в Windows аналогично уничтожению -9 в Linux - программе не предоставляется возможность очистки.

...