Рассматривали ли вы, что случилось бы, если бы ваш синглтон вообще не был удален?
По определению, синглтон - это один объект, совместно используемый многими клиентскими объектами, поскольку клиенты стремятся приходить и уходить. Большую часть времени ваш синглтон будет жить столько же, сколько и ваш процесс.
Когда ваш процесс завершает свою работу, ОС восстанавливает большинство ресурсов (память, файловые дескрипторы, сокеты ...), и это совершенно нормально - выделить этот синглтон, а затем просто дать ему умереть. Это будет моя рекомендация.
- Код проще. Меньше вызовов функций, меньше сложности. Не нужно думать, когда должен быть вызван терминатор, и вот что привело вас сюда.
- С явной очисткой, поскольку ваше приложение становится все более сложным (и они, как правило, по мере того, как вы продолжаете добавлять функции), вы рискуете, что какой-то другой объект попытается получить доступ к одноэлементной ссылке после того, как он был завершен и уничтожен. Теперь вместо безобидной утечки памяти, которая немедленно устраняется ОС, у вас есть уродливое необработанное диалоговое окно исключений, на которое пользователи могут посмотреть.
Хорошей практикой также является размещение функции Initialize () для синглтона внутри GetInstance () (как продемонстрировано в pdillon3) вместо того, чтобы приложение явно вызывало Initialize (). Вы не указали эту часть, и если ваш проект исполняемый, вы должны быть в порядке с существующим дизайном. Но будьте осторожны, если вы поместите этот код в DLL. Некоторые люди считают, что DllMain - это хорошее место для инициализации одноэлементных объектов, но это не так. Во время DllMain глобальная критическая секция блокировки загрузчика блокируется, и одиночные инициализации, как правило, вызывают всевозможные проблемы.
Кроме того, теперь вместо 3 методов в вашем одноэлементном интерфейсе у вас есть только один: GetInstance (), красивый и простой.
Наконец, как упоминал Дитмар (хотя я по-прежнему считаю синглтон паттерном, а не анти-паттерном и GoF согласен со мной), вы должны действительно подумать, нужен ли вам на самом деле синглтон. Я использую их время от времени, но только тогда, когда у меня нет выбора, не потому, что они удобны. Они действительно являются образцом последней инстанции, когда альтернатива еще более злая. Не используйте их только потому, что они удобны.