En Linux tengo algún código C++ generado de una biblioteca estática que define una variable global. Una sola instancia de esta variable global se comparte entre dos bibliotecas compartidas que hacen referencia a su símbolo.En Linux, ¿por qué el destructor se ejecuta dos veces en una instancia compartida de variable global en C++?
Cuando el proceso se apaga y se ejecuta la fase de terminación estática, veo que el destructor en esta instancia compartida se ejecuta dos veces. Presumiblemente una vez por biblioteca cuando cada descarga.
Esta pregunta está estrechamente relacionada con otra que vi recientemente aquí: related question. Esto suena como el mismo comportamiento, pero no hay discusión sobre por qué está sucediendo.
¿Alguien sabe la explicación teórica detrás de este comportamiento?
Solo debe ejecutarse una vez por variable según el código generado por el compilador. Intente obtener la dirección de la variable a medida que se ejecuta el destructor para verificar que sea el mismo objeto. –
Quizás almacenaste un puntero al objeto en alguna clase de puntero inteligente, que intenta destruir su targer. –
Entonces, ¿global se define en (una unidad de compilación de) solo una de las bibliotecas? – Thomas