Como tantas veces, "depende". En cualquier sistema operativo digno de este nombre, cuando finaliza su proceso, se liberará toda la memoria y otros recursos utilizados localmente dentro del proceso. Simplemente no necesita preocuparse por eso.
Sin embargo, si su singleton está asignando recursos de por vida fuera de su propio proceso (tal vez un archivo, un nombre mutex o algo similar), entonces necesita considerar la limpieza adecuada.
RAII lo ayudará aquí. Si usted tiene un escenario como este:
class Tempfile
{
Tempfile() {}; // creates a temporary file
virtual ~Tempfile(); // close AND DELETE the temporary file
};
Tempfile &singleton()
{
static Tempfile t;
return t;
}
... entonces usted puede estar seguro de que su archivo temporal será cerrado y eliminado sin embargo, su aplicación se cierra. Sin embargo However, this is NOT thread-safe, and the order of object deletion may not be what you expect or require.
, si su producto único se implementa de la siguiente
Tempfile &singleton()
{
static Tempfile *t = NULL;
if (t == NULL)
t = new Tempfile();
return *t;
}
... entonces usted tiene una situación diferente. La memoria utilizada por el archivo temporal se recuperará, pero el archivo NO se eliminará porque no se invocará el destructor.
Si confía en que la biblioteca de tiempo de ejecución destruya sus objetos estáticos después de retornos principales, y espera que sea posible usar el código en una DLL (Windows), entonces está ejecutando código durante DllMain, y la mayoría de las cosas podría me gusta hacer son inseguros. –