Я заметил различие в поведении для деструктора 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");
}
Удаление из диспетчера процессов в Window аналогично kill -9 в Linux - программе не дается возможность выполнить очистку.