Sous Linux, j'ai du code C++ généré à partir d'une bibliothèque statique qui définit une variable globale. Une seule instance de cette variable globale est partagée entre deux bibliothèques partagées qui font référence à son symbole.Sur Linux, pourquoi le destructeur s'exécute-t-il deux fois sur une instance partagée de variable globale en C++?
Lorsque le processus s'arrête et que la phase de terminaison statique est exécutée, je vois que le destructeur de cette instance partagée est exécuté deux fois! Vraisemblablement une fois par bibliothèque à chaque déchargement.
Cette question est étroitement liée à une autre que j'ai vu récemment ici: related question. Cela ressemble au même comportement, mais il n'y a pas de discussion sur la raison pour laquelle cela se produit.
Est-ce que quelqu'un connaît l'explication théorique derrière ce comportement?
Il ne doit être exécuté qu'une seule fois par variable par le code généré par le compilateur. Essayez d'obtenir l'adresse de la variable lorsque le destructeur est exécuté pour vérifier qu'il s'agit du même objet. –
Peut-être avez-vous stocké un pointeur sur l'objet dans une classe de pointeurs intelligents, qui tente de détruire son targer. –
Donc le global est défini dans (une unité de compilation de) une seule des bibliothèques? – Thomas