Tiene dos soluciones aquí:
- No elimine eliminarlo (que está en C++, utiliza nuevas y eliminar, haga;?)) . Casi todos los sistemas operativos actuales "liberarán" de todos modos la memoria asignada por la aplicación una vez que haya finalizado. Pero esa no es una buena solución, que hace que las pérdidas de memoria sean difíciles de detectar, por ejemplo.
- Encapsule su puntero en una clase (como miembro), luego use esta clase como el tipo de su estática. De esta forma, sabrá que se llamará al destructor de clase al final de la aplicación. A continuación, simplemente borre sus datos en el destructor y el trabajo estará listo y limpio. Ese es el poder de RAII.
Le sugiero que haga 2, esa es una manera muy limpia de hacerlo.
Aquí hay un ejemplo simple. En lugar de hacer esto
static Thing* things = new Thing(); // or whatever way to initialize, here or in a specific function
que va a hacer lo siguiente:
class ThingManager // or whatever name you like
{
public:
ThingManager(Thing* thing) : m_thing(thing) { }//or create it here? whatever solution suits your way of creating the data
~ThingManager() { delete m_thing; } // THAT's the important part!
Thing* instance() const { return m_thing; } // or whatever accessor you need, if you need one
private:
Thing* m_thing;
};
y luego
static ManagedThing thing; // now i can access it via thing.instance()
Cuando termina el programa, será destruido la variable estática (que no se PUNTERO más) y se llamará a su destructor para hacer eso.
Está escrito solo para darle una idea de cómo puede hacerlo.
¿Parece que estás intentando reinventar punteros inteligentes? –
Este problema es uno de los problemas que ocurren al implementar singletons (http://en.wikipedia.org/wiki/Singleton_pattern). El ejemplo del código de @ Klaim a continuación es un ejemplo de uno. Pueden ser una buena cosa o una muleta. No abusar de ellos. :) – Void