Ver Mensaje Individual
  #3 (permalink)  
Antiguo 23/11/2015, 10:05
dehm
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 7 meses
Puntos: 10
Respuesta: Entendiendo el patrón Singleton.

Cita:
Iniciado por eferion Ver Mensaje
Te contestó desde el móvil, así que disculpas si no queda del todo organizado.

Para empezar un singleton NO DEBE BORRARSE, ya que el puntero "instance" no se entera y se queda apuntando a una dirección no válida. Para evitar ese tipo de tentaciones lo mejor es devolver una referencia, ya que a nadie se le ocurre convertir una referencia en puntero para borrarla.

En segundo lugar, queda más limpio si evitas usar una variable estática a nivel de clase, es mejor declararla estática a nivel de función:

Código C++:
Ver original
  1. clases Singleton
  2. {
  3. public:
  4.   static Singleton& Instance()
  5.   {
  6.     static Singleton instance;
  7.     return instance;
  8.   }
  9. };

Además, lo suyo es declarar los constructores privados, para evitar que se hagan copias no autorizadas del objeto. No sólo el constructor por defecto, sino también el constructor copia y, por costumbre, el operador de asignación.

La excepción te salta porque getInstance es un método estático... Es decir, hay que llamarlo S=Singleton::getInstance(). Además que S es un puntero no inicializado... cualquier uso de ese puntero te dará error.

Y para terminar, Singleton se usa cuando se necesita una única instancia del objeto y que este sea global a toda la aplicación. No veo por qué querrías crear un objeto con argumentos... Y si después pides otro con argumentos diferentes?? En esos casos no necesitas un Singleton sino objetos comunes.

Un saludo
Gracias como siempre, eferion. Ya tengo base para seguir investigando.
__________________
Mi calculadora en Qt