Zauważyłem różnicę w zachowaniu dla destruktora gcc podczas kompilacji pod linux i crosscompiled z mingw.Zachowanie destruktora GCC
Na Linuksie destruktor nie zostanie wywołany, chyba że program zakończy się normalnie samoczynnie (zwraca się z main
). Myślę, że to ma sens, jeśli bierzesz pod uwagę programy obsługi sygnałów.
Na Win32 jednak, destruktor jest wywoływany, jeśli program jest zakończony przez powiedz CTRL-C, ale nie, gdy zabity z Task Manager.
Dlaczego tak jest? A co sugerowałbyś, aby destruktor był wywoływany bez względu na to, jak proces się kończy - w szczególności na Win32?
Przykładowy kod:
#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");
}
Nie można wywołać destruktora w * każdym przypadku. Na przykład 'SIGKILL' nigdy nie zostanie wysłany do twojego programu. System operacyjny po prostu go wymazuje. –