Unter Linux habe ich etwas generierten C++ - Code aus einer statischen Bibliothek, die eine globale Variable definiert. Eine einzelne Instanz dieser globalen Variablen wird von zwei gemeinsam genutzten Bibliotheken gemeinsam genutzt, die sich auf ihr Symbol beziehen.Unter Linux, warum wird der Destruktor zweimal auf gemeinsam genutzte Instanz der globalen Variablen in C++ ausgeführt?
Wenn der Prozess heruntergefahren und die statische Beendigungsphase ausgeführt wird, sehe ich, dass der Destruktor auf dieser freigegebenen Instanz zweimal ausgeführt wird! Vermutlich einmal pro Bibliothek als jeder entlädt.
Diese Frage steht in engem Zusammenhang mit einer anderen, die ich kürzlich hier gesehen habe: related question. Das klingt nach dem gleichen Verhalten, aber es gibt keine Diskussion darüber, warum es passiert.
Kennt jemand die theoretische Erklärung hinter diesem Verhalten?
Es sollte nur einmal pro Variable durch den Compiler generierten Code ausgeführt werden. Versuchen Sie, die Adresse der Variablen zu ermitteln, während der Destruktor ausgeführt wird, um sicherzustellen, dass es sich um dasselbe Objekt handelt. –
Vielleicht haben Sie in einer Smart-Pointer-Klasse einen Zeiger auf das Objekt gespeichert, der versucht, seinen targer zu zerstören. –
Also ist das Globale in (einer Kompilierungseinheit von) nur eine der Bibliotheken definiert? – Thomas