Singleton легко создавать, если вы не находитесь в многопоточной среде. Если вы можете, вы должны убедиться, что только один поток пытается создать ваш синглтон (и, следовательно, уничтожить его). После создания он может использоваться несколькими потоками одновременно ... хотя это может быть не лучшим способом справиться с этим.
В любом случае, очень упрощенный вариант таков:
class MySingleton
{
public:
static MySingleton& Intance() { static MySingleton M_Instance; return M_Instance; }
private:
MySingleton() {}
};
Это работает хорошо, если вы не используете MI и не используете синглтон во время глобальных разрушений. Кроме того, он не работает по крайней мере с VC2003 (используется для создания по одному экземпляру для каждой библиотеки, которую вызывал метод ....), я не знаю, с более поздними версиями, мы вообще перестали компилировать в Windows некоторое время назад.
Теперь, если вы хотите больше узнать о Синглтоне:
- вопросы создания и уничтожения
- Сорт жизни
- Поток безопасности
Александреску сконцентрировался на этом для полной главы Современный дизайн C ++ , если у вас нет доступа к книге, вы все равно можете прочитать код, полученный в результате отражения в Локи .
Кроме того, вы можете просто использовать альтернативные подходы к дизайну. Синглтон может затруднить тестирование, об этом были интересные мысли от людей, которые поддерживают Dependency Injection. Загляните в Misko Hevery запись в блоге .