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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top