Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Singleton -> drawbacks?

Iniciado por Pogacha, 06 de Noviembre de 2007, 09:58:50 PM

« anterior - próximo »

Pogacha

Que tal,
¿Que desventajas podria haber al utilizar el operador -> para referenciar la instancia de un singleton?

Conocí este "truco" por zupervaca hace unos años, pero en realidad me siempre me quedaron dudas y nunca lo usé.
Pego su propio codigo:/// <summary>Template que nos permite acceder a una clase unica</summary>
template <class TYPE> class Singleton
{
// Metodos
public:
  /// <summary>Operador -></summary>
  TYPE *operator -> ()
  {
     return this->Instance();
  }

  /// <summary>Operador *</summary>
  TYPE *operator * ()
  {
     return this->Instance();
  }

// Valores privados
private:
  /// <summary>Obtener la instancia unica</summary>
  TYPE *Instance()
  {
     static TYPE intance;
     return &intance;
  }
};



Obviamente los singletones tendrián una nomenglatura especial para evitar confusiones.

Algo como un prefijo, posiblemente "S_"

Comparando:System::instance()->OpenFile("");
System::get_instance()->OpenFile("");
S_System->Open_File("");


En facilidad de lectura y escritura gana el "S_->", se pierde el respeto al singleton pero en realidad no creo que se puedan introducir muchos bugs por eso ...

Gurus de C++ ... que opinion tienen al respecto?

Zaelsius

Yo personalmente prefiero la primera o segunda forma. Me parece mucho más clara que sobrecargar el operador -> y puede llevar a confusión al que lo lea.

Es mi opinión.. yo en general no uso sobrecargas en mis clases a excepción de algun tipo abstracto de dato(vector, cadena, etc).

Pogacha

Cita de: "ZaelSiuS"Es mi opinión.. yo en general no uso sobrecargas en mis clases a excepción de algun tipo abstracto de dato(vector, cadena, etc).
Esto lo he escuchado antes y suma al tema de "no hacerlo por que no se acostumbra por convencion", pero estaria dispuesto a romper esa convención si me sirviera en hacer mas sencilla la escritura y lectura.

Algo mas?

Mas especialmente por problemas que pueda traer el operador en si, problemas de funcionalidad.

shephiroth

Estoy deacuerdo con Zaelsius.

A las convenciones no se llega porque si, y si lo que buscas es hacer mas clara la lectura en mi opinion no lo consigues. Cualquiera que se una al proyecto (o si lo poneis open source y quiere mejorarlo) y vea las dos primeras lineas sabra de inmediato que es un singleton. Sin embargo con la tercera, a priori pensara que es un objecto, buscara que tipo de objeto es y no lo encontrara, hasta que se de cuenta de que se ha sobreescrito el operador.

Yo desde luego no aconsejo hacerlo asi. Suerte de todos modos ;)

davur

Respecto a la conveniencia de la sobrecarga de operadores en general, es una cuestión algo "religiosa" y que no tiene una única respuesta válida. ¿Realmente les facilita el trabajo a todos los miembros del equipo? ¿O en cambio les confunde más? Personalmente, creo que es adecuado aplicar el principio de menor sorpresa a la hora de tomar este tipo de decisiones.

Dicho sea de paso, aunque no es el tema del hilo, los singletones dan pie a la introducción de tantos problemas que es una buena práctica evitar a toda costa diseños que contemplen el uso (y en la mayoría de ocasiones, abuso) de este antipatrón.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.