Questionário C++ - Singletons
-
09-06-2019 - |
Pergunta
Em breve postarei um artigo sobre meu blog, mas gostaria de verificar se não perdi nada primeiro.
Encontre um exemplo que perdi e citarei você em minha postagem.
O tópico é falha nas implementações de Singleton:Em que casos você pode acidentalmente obter várias instâncias de um singleton?
Até agora, eu descobri:
- Condição de corrida na primeira chamada para
instance()
- Incorporação em múltiplas DLLs ou DLL e executável
- Definição de modelo de um singleton - na verdade, classes separadas
Estou perdendo alguma outra maneira - talvez com herança?
Solução
Se você usar um campo de instância estática inicializado em seu arquivo cpp, poderá obter várias instâncias (e um comportamento ainda pior) se a inicialização de algum estático/global tentar obter uma instância do seu singleton.Isso ocorre porque a ordem de inicialização estática nas unidades de compilação é indefinida.
Outras dicas
A herança não deve ser um problema, desde que o ctor seja privado.
No entanto, se você não proibir o construtor de cópia, os usuários poderão copiar [não] intencionalmente a instância singleton.Herdando privadamente de boost::não copiável é a maneira mais fácil de evitar isso.