Из другого вопроса я предоставил ответ, который содержит ссылки на множество вопросов/ответов о синглтонах: Дополнительную информацию о синглтонах можно найти здесь:
Итак, я прочитал тему «Синглетоны: хороший дизайн или костыль?»
И споры все еще не утихают.
Я рассматриваю синглтоны как шаблон проектирования. (хорошие и плохие).
Проблема Singleton не в шаблоне, а в пользователях (извините всех). Все, включая их отца, думают, что могут реализовать его правильно (а, судя по многочисленным интервью, которые я дал, большинство людей не могут). Кроме того, поскольку все думают, что могут реализовать правильный синглтон, они злоупотребляют шаблоном и используют его в неуместных ситуациях (заменяя глобальные переменные синглтонами!).
Итак, основной вопросы, на которые необходимо ответить:
- Когда следует использовать синглтон
- Как вы правильно реализовать синглтон
Итак, приступим к делу:
Я подниму руку и скажу, что это то, чем я пользуюсь, но, вероятно, у него проблемы.
Мне нравится «Скотт Майерс» рассмотрение этой темы в своих книгах «Эффективное C++"
Хорошие ситуации для использования синглтонов (не так много):
- Среды ведения журналов
- Пулы рециркуляции потоков
Код: Выделить всё
/*
* C++ Singleton
* Limitation: Single Threaded Design
* See: http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf
* For problems associated with locking in multi threaded applications
*
* Limitation:
* If you use this Singleton (A) within a destructor of another Singleton (B)
* This Singleton (A) must be fully constructed before the constructor of (B)
* is called.
*/
class MySingleton
{
private:
// Private Constructor
MySingleton();
// Stop the compiler generating methods of copy the object
MySingleton(MySingleton const& copy); // Not Implemented
MySingleton& operator=(MySingleton const& copy); // Not Implemented
public:
static MySingleton& getInstance()
{
// The only instance
// Guaranteed to be lazy initialized
// Guaranteed that it will be destroyed correctly
static MySingleton instance;
return instance;
}
};
Подробнее здесь: https://stackoverflow.com/questions/865 ... it-be-used
Мобильная версия