Как часто, «это зависит». В любой операционной системе, достойной имени, когда ваш процесс завершается, все память и другие ресурсы, используемые локально внутри процесса, будут выпущены. Вам просто не нужно об этом беспокоиться.
Однако, если ваш синглтон выделяет ресурсы со временем жизни вне собственного процесса (возможно, файл, именованный мьютекс или что-то подобное), тогда вам нужно рассмотреть соответствующую очистку.
RAII поможет вам здесь. Если у вас есть сценарий, как это:
class Tempfile
{
Tempfile() {}; // creates a temporary file
virtual ~Tempfile(); // close AND DELETE the temporary file
};
Tempfile &singleton()
{
static Tempfile t;
return t;
}
... то вы можете быть уверены, что ваш временный файл будет закрыт и удален, однако ваши выходы приложений. However, this is NOT thread-safe, and the order of object deletion may not be what you expect or require.
однако, если синглтон реализуется как НАСТОЯЩЕГО
Tempfile &singleton()
{
static Tempfile *t = NULL;
if (t == NULL)
t = new Tempfile();
return *t;
}
... то у вас есть другая ситуация. Память, используемая вашим tempfile, будет восстановлена, но файл НЕ будет удален, потому что деструктор не будет вызван.
Если вы полагаетесь на библиотеку времени выполнения, которая уничтожает ваши статические объекты после основных возвратов, и вы надеетесь, что это будет возможно использовать код в (Windows) DLL, тогда вы запускаете код во время DllMain, и большинство вещей, которые вы можете использовать делать это небезопасно. – 2010-08-13 20:32:00