Tengo un proyecto de MS C++ (llamémosle proyecto A) que actualmente estoy compilando como una biblioteca estática (.lib). Define una variable global foo. Tengo otros dos proyectos que se compilan por separado (llámalos B y C, respectivamente) y cada uno vincula la biblioteca estática compartida A in. Tanto B como C son dll que terminan cargados en el mismo proceso. Me gustaría compartir una única instancia de foo de A entre B y C en el mismo proceso: un singleton. No estoy seguro de cómo lograr el patrón singleton aquí con el proyecto A, ya que está compilado estáticamente en B y C por separado. Si declaro foo como extern tanto en B como en C, termino con instancias diferentes en B y C. El uso de un patrón simple de clase singleton estándar con un método getInstance estático da como resultado dos instancias foo estáticas.Variable global compartida en la biblioteca estática de C++
¿Hay alguna manera de lograr esto mientras el proyecto A está compilado estáticamente en B y C? ¿O tengo que hacer que A sea una DLL?
* "Si declaro foo como externo tanto en B como en C, termino con instancias diferentes en B y C." * - ¿Es esto realmente cierto? –
Parece ser cierto: es el comportamiento que observo cuando paso por el programa mientras estoy depurando. Veo el constructor para foo llamado dos veces y las direcciones de las variables externas g_Foo son diferentes en los dos módulos B y C. ¿No debería ser así? – Zach
posible duplicado de [¿Cómo implementar la variable global de proceso en C++?] (Http://stackoverflow.com/questions/669989/how-to-implement-process-global-variable-in-c) – Zach