<div dir="ltr">Hola Miguel Ángel,<br><div class="gmail_extra"><br><div class="gmail_quote">2014-07-13 6:13 GMT-04:00 Miguel Ángel Torres Fernández-Píñar <span dir="ltr"><<a href="mailto:miguelangeltorresfp@gmail.com" target="_blank">miguelangeltorresfp@gmail.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div><div><div>Muchas gracias Borja por tu respuesta. Sé que estos son temas complejos y mi nivel de C++ es bastante bajo.<br>
<br>Parece que ya funciona.<br><br>Hay una cosa que no entiendo en el ejemplo de  <a href="http://caymcorp.wordpress.com/2010/09/28/singletons-en-c-el-problema-de-la-destruccion/" target="_blank">http://caymcorp.wordpress.com/2010/09/28/singletons-en-c-el-problema-de-la-destruccion/</a><br>

<br></div>Para qué se usa esto :<br><br>public:<br>            virtual ~SingletonManagers(){};<br><br></div></div></div></blockquote><div><br></div><div>Esto sirve para crear una clase virtual, de la que se puede derivar y así usar objetos polimórficos de la clase base, 'Singleton'.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div><div></div>Se supone que el destructor que se llama automáticamente con :<br>
atexit(&DestroySingleton);    // At exit, destroy the singleton <br>
<br></div></div></blockquote><div><br></div><div>Sí, pero 'DestroySingleton()' invocará implícitamente a su destructor, '~Singleton()'.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div></div>es :<br><div><br>// Delete the singleton instance<br>            static void DestroySingleton()<br>            {<br>                if(pInstance_ != NULL) delete pInstance_;<br></div></div></blockquote>
<div><br></div><div>Aquí se invocará al destructor, '~Singleton()'.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div>            }<br><br></div></div></blockquote><div><br></div><div>Debo agregar que el uso de 'atexit()' puede ser peligroso para este tipo de problemas, ya que no garantiza el orden correcto de la destrucción de los objetos. En el código que usas, se invoca 'atexit()' dentro de 'getInstance()' para asegurar que se registre primero la función de destrucción.</div>
<div><br></div><div>De todas maneras, sugiero usar punteros inteligentes. En la versión actual de C++, que a veces se llama C++11, puedes usar la plantilla-clase, 'shared_ptr', si quieres permitir el compartir entre punteros, o 'unique_ptr', si no quieres permitirlo. De esta manera, usas un objeto que contiene el puntero al objeto 'Singleton', por lo que al destruirse tal objeto, se invocará su destructor.</div>
<div><br></div><div>La idea tras los punteros inteligentes es usar un objeto que contiene el puntero y no tener que manipular punteros directamente. Así reducimos la probabilidad de provocar fugas de memoria al usar punteros directamente.</div>
<div><br></div><div><br></div><div>Espero que esto te oriente.</div><div><br></div><div>Steven</div><div><br></div></div></div></div>