Editar: De otra pregunta, proporcioné una respuesta que tiene enlaces a muchas preguntas / respuestas sobre singletons: Más información sobre singletons aquí:
Así que he leído el hilo Singletons: ¿buen diseño o una muleta?
Y la discusión aún continúa.
Veo Singletons como un patrón de diseño (bueno y malo).
El problema con Singleton no es el Patrón sino los usuarios (lo siento, todos). Todos y su padre piensan que pueden implementar uno correctamente (y de las muchas entrevistas que he hecho, la mayoría de la gente no puede). Además, como todos piensan que pueden implementar un Singleton correcto, abusan del Patrón y lo usan en situaciones que no son apropiadas (¡reemplazando las variables globales con Singletons!).
Entonces, las principales preguntas que deben responderse son:
- ¿Cuándo deberías usar un Singleton?
- ¿Cómo implementas un Singleton correctamente?
Mi esperanza para este artículo es que podamos reunir en un solo lugar (en lugar de tener que buscar en Google y buscar en varios sitios) una fuente autorizada de cuándo (y luego cómo) usar un Singleton correctamente. También sería apropiado una lista de Anti-Usos e implementaciones erróneas comunes que explican por qué no funcionan y para las buenas implementaciones sus debilidades.
Así que ponte en marcha:
levantaré la mano y diré que esto es lo que uso, pero que probablemente tenga problemas.
Me gusta el manejo de "Scott Myers" del tema en sus libros "Efectivo C ++"
Buenas situaciones para usar Singletons (no muchos):
- Marcos de registro
- Piscinas de reciclaje de hilos
/*
* 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;
}
};
OKAY. Vamos a obtener algunas críticas y otras implementaciones juntas.
:-)