Синглтон: как его следует использоватьC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Синглтон: как его следует использовать

Сообщение Anonymous »

Изменить:
Из другого вопроса я предоставил ответ, который содержит ссылки на множество вопросов/ответов о синглтонах: Дополнительную информацию о синглтонах можно найти здесь:

Итак, я прочитал тему «Синглетоны: хороший дизайн или костыль?»

И споры все еще не утихают.

Я рассматриваю синглтоны как шаблон проектирования. (хорошие и плохие).

Проблема 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»