Frage zum Singleton Pattern
-
Moin.
Ich habe eine Frage zum Singleton Pattern wie es bei Wikipedia beschrieben steht:
class Singleton { private: static Singleton* instance; Singleton() {} Singleton(const Singleton&) {} ~Singleton() {} public: static Singleton& getInstance(); static void destroy(); }; Singleton* Singleton::instance = 0; Singleton& Singleton::getInstance() { if ( !instance ) instance = new Singleton(); return *instance; } void Singleton::destroy() { if ( instance ) delete instance; instance = 0; }Wieso ist der Typ des Rückgabewerts von getInstance Singleton& und 'instance' dereferenziert?
Ich hätte jetzt den Zeiger auf das Objekt zurückgeliefert, also Typ des Rückgabewert Singleton*.
Damit könnte man dann doch wunderbar arbeiten, oder nicht? Wieso wird das so gemacht wie es bei Wikipedia steht?
Vielen Dank
-
Warum sollte man?
-
314159265358979 schrieb:
Warum sollte man?

Was willst du denn mit einem Zeiger? Ihn auf ein anderes Objekt zeigen lassen? Ne, warte mal..
-
Vielen Dank für ne Antwort ohne Untertöne

@cooky451
Okay ich warte...
-
Ich glaube, du hast cooky nicht richtig verstanden.
Zeiger kann man nachträglich auf andere Objekte des gleichen Typs umlenken.
also
Foo a, b; Foo * p = &a; // Initialisierung p = &b; // Hier wird "umgelenkt"Das ergibt aber bei einem Singleton keinen Sinn,
da es ja nur das eine Singleton gibt.
Deshalb das "Ne, warte mal..."
Jetzt ist aber intern eine Referenz nichts anderes als ein Zeiger.
Mit 3 Unterschieden:
1. Man kann Referenzen nachträglich nicht mehr umlenken (ist ja auch nicht nötig)
2. Keine Zeigerarithmetik
3. Die Syntax ist angenehmer (Geschmackssache)Foo & foo = Foo::instance(); foo.bar(); // vs. Foo * foo = Foo::instance(); foo->bar();
-
ViktorII schrieb:
Damit könnte man dann doch wunderbar arbeiten, oder nicht?
Ja
ViktorII schrieb:
Wieso wird das so gemacht wie es bei Wikipedia steht?
Weil es damit noch bequemer wird.
Abgesehen davon solltest du Singleton besser nicht verwenden. Grund: Siehe ein beliebiger der tausenden Threads zum Thema hier im Forum

-
@DrakoXP: Ja klar, Du hast recht. Jetzt habe ich es verstanden. Hatte den & Operator für Referenzen nicht mehr auf dem Schirm. Dachte erste das dort eine Kopie erstellt wird, was ja natürlich keinen Sinn macht

Vielen Dank für Deine ausführliche Erklärung
und auch Dank an dot