Я заметил разницу в поведении деструктора 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");
}
SIGKILL
никогда не будет отправлено в вашу программу. ОС просто сотрет его с лица земли. - person Carl Norum   schedule 25.05.2010