Su Linux, ho generato un codice C++ generato da una libreria statica che definisce una variabile globale. Una singola istanza di questa variabile globale è condivisa tra due librerie condivise che si riferiscono al suo simbolo.Su Linux, perché il distruttore viene eseguito due volte sull'istanza condivisa della variabile globale in C++?
Quando il processo si arresta e viene eseguita la fase di terminazione statica, vedo che il distruttore su questa istanza condivisa viene eseguito due volte! Presumibilmente una volta per libreria mentre ognuno scarica.
Questa domanda è strettamente correlata a un'altra che ho visto di recente qui: related question. Sembra lo stesso comportamento, ma non c'è discussione sul perché sta accadendo.
Qualcuno conosce la spiegazione teorica di questo comportamento?
Dovrebbe essere eseguito una volta sola per variabile dal codice generato dal compilatore. Prova a ottenere l'indirizzo della variabile mentre viene eseguito il distruttore per verificare che si tratti dello stesso oggetto. –
Forse hai memorizzato un puntatore sull'oggetto in una classe di puntatore intelligente, che tenta di distruggere il suo mirino. –
Quindi il globale è definito in (una unità di compilazione di) solo una delle librerie? – Thomas