uma aulaApenas um objeto pode ser criado, o padrão de design dessa classe é chamado de padrão singleton, o que garanteno sistemaa classeSó pode haver uma instância(eCompartilhamento de processo pai-filho), uma classe singleton típica é o pool de memória de C++STL
As ideias básicas de design do modo singleton C++:
privatizaçãoConstrutor, exclua o padrãoconstrutor de cópiaesobrecarga do operador de atribuiçãoImpedir que objetos sejam criados e copiados diretamente
Os recursos de memória do objeto singleton podem ser liberados pelo sistema operacional ou o destruidor pode ser personalizado para concluir operações especiais
2. Duas implementações do modo singleton
modo homem faminto
Turma solteira faminta no programaantes de entrar na função principalcria uma instância única de
HungerSingletondevariável de membro estáticosimum objeto (ou ponteiro) de seu próprio tipo,Categoriavariável de membro estáticoA inicialização é concluída antes de entrar na função principal. Como o construtor é privatizado, objetos desta classe não podem ser criados durante a execução do programa.
Vantagens do modo Hungry Singleton:
porqueProcessos filhos só podem ser criados na função principal, então a turma solteira famintaNão há problemas de segurança de thread, sem competir por recursos do sistema com classes de outros threads, emEm um ambiente multithread de alta simultaneidadeCapaz de executar tarefas com mais eficiência
Desvantagens do padrão Hungry Singleton:
Se houver múltiplas classes singleton em um programa, nósnenhum controle sobre sua ordem de inicialização
A classe singleton faminta diminuirá a velocidade de inicialização do programa e, mesmo que a classe não seja usada, uma instância será criada, o que pode causar desperdício de memória
modo preguiçoso
classe singleton preguiçosa no programaDepois de entrar na função principalCabe ao código subsequente decidir se deseja criar uma instância
LazySingletonGetinstance()A classe criará uma instância quando a interface do membro for chamada pela primeira vez
Vantagens do padrão singleton preguiçoso:
capaz de controlarA ordem de inicialização de vários objetos de classe singleton preguiçosos, e criado apenas quando necessário, evitando desperdício de memória
Desvantagens do padrão singleton preguiçoso:
Existem problemas de segurança de thread em um ambiente multithread e bloqueios são necessários