Pregunta

Pronto publicaré un artículo sobre mi blog, pero primero me gustaría verificar que no me he perdido nada.

Encuentra un ejemplo que me he perdido y te citaré en mi publicación.

El tema son implementaciones fallidas de Singleton:¿En qué casos puedes accidentalmente ¿Obtener varias instancias de un singleton?

Hasta ahora, se me ocurrió:

  • Condición de carrera en la primera llamada a instance()
  • Incorporación en múltiples DLL o DLL y ejecutable
  • Definición de plantilla de un singleton: en realidad clases separadas

¿Me faltan otras formas, tal vez con la herencia?

¿Fue útil?

Solución

Si usa un campo de instancia estática que inicializa en su archivo cpp, puede obtener múltiples instancias (y un comportamiento aún peor) si la inicialización de alguna instancia estática/global intenta obtener una instancia de su singleton.Esto se debe a que el orden de inicialización estática entre las unidades de compilación no está definido.

Otros consejos

La herencia no debería ser un problema siempre que el ctor sea privado.

Sin embargo, si no no permite el constructor de copias, los usuarios pueden copiar [in]intencionalmente la instancia singleton.Heredar de forma privada de impulso::no copiable es la forma más sencilla de evitarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top