Я заметил разницу в поведении деструктора 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");
}