Editar: A partir de outra pergunta, forneci uma resposta com links para muitas perguntas / respostas sobre singletons: Mais informações sobre singletons aqui:
Então, eu li o tópico Singletons: bom design ou muleta?
E o argumento ainda continua.
Eu vejo Singletons como um padrão de design (bom e ruim).
O problema com o Singleton não é o padrão, mas os usuários (desculpe a todos). Todo mundo e seu pai pensam que podem implementá-lo corretamente (e das muitas entrevistas que fiz, a maioria das pessoas não). Também porque todos pensam que podem implementar um Singleton correto, abusam do padrão e o usam em situações que não são apropriadas (substituindo variáveis globais por singletons!).
Portanto, as principais perguntas que precisam ser respondidas são:
- Quando você deve usar um Singleton
- Como você implementa um Singleton corretamente
Minha esperança neste artigo é que possamos coletar juntos em um único local (em vez de precisar pesquisar e pesquisar em vários sites) uma fonte autorizada de quando (e depois como) usar um Singleton corretamente. Também seria apropriada uma lista de anti-usos e implementações ruins comuns, explicando por que eles não funcionam e, para as boas implementações, suas fraquezas.
Portanto, faça a bola rolar:
vou segurar minha mão e dizer que é isso que uso, mas provavelmente tem problemas.
Eu gosto de "Scott Myers" lidar com o assunto em seus livros "Effective C ++"
Boas situações para usar Singletons (não muitos):
- Estruturas de log
- Pools de reciclagem de threads
/*
* 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;
}
};
ESTÁ BEM. Vamos reunir algumas críticas e outras implementações.
:-)