Singleton so OK?
-
Danke!
Bei diesem Code funktioniert ein Vergleich der beiden Objekte nicht:
#include<iostream> using namespace std; class Singleton { private: Singleton(); Singleton(const Singleton&); public: static Singleton& getInstance(); }; Singleton& Singleton::getInstance() { static Singleton instanz; return instanz; } int main() { Singleton &gibtsnureinmal = Singleton::getInstance(); Singleton &unddasauch = Singleton::getInstance(); if(gibtsnureinmal == unddasauch) { cout<<"Die beiden Objekte sind die gleichen, nur unter anderen Namen."; system("pause"); } return 0; }C++-Builder will, dass ich den ==-Operatpr implementiere. Dabei will ich doch nur testen, ob die beiden Objekte die gleichen sind
Was mache ich falsch?
-
Hallo! schrieb:
C++-Builder will, dass ich den ==-Operatpr implementiere. Dabei will ich doch nur testen, ob die beiden Objekte die gleichen sind
Hehe, du lieferst dir die Erklärung gleich im eigenen Satz.

Vergleiche von selbst erstellten Klassen erfordern eine Implementierung des entsprechenden Operators. In deinem Falle von
operator==.
-
Vergleiche die Zeiger. Du willst doch schliesslich wissen ob beides die gleiche Instanz ist und nicht ob der Inhalt gleich ist.
-
Also so?
(scheint zu klappen)int main() { Singleton &gibtsnureinmal = Singleton::getInstance(); Singleton &unddasauch = Singleton::getInstance(); Singleton *ptr1 = &unddasauch; Singleton *ptr2 = &gibtsnureinmal; if(ptr1 == ptr2) { cout<<"Die beiden Objekte sind die gleichen, nur unter anderen Namen."; system("pause"); } return 0; }
-
Ja, wobei du dann nicht unbedingt den Umweg über eine Referenz einschlagen musst.
Du scheinst ja schon sehr misstrauisch gegenüber C++ eingestellt zu sein. :p
-
Wie würdest du es machen?
Hast du ein gutes Tutorial für Umsteiger aus anderen Sprachen?
Ich bin von PHP sehr verwöhnt, wenn es Dokumentation angeht
30 Sekunden googlen und das Problem ist gelöst 
-
C++ und PHP sind so unterschiedliche Sprachen, da sollte man bei C++ einfach von Grund auf anfangen. Am besten in C++ sind Bücher zu empfehlen, gibt zwar auch ein paar Tutorials (siehe FAQ), aber die Bücher vermitteln einem im allgemeinen einen umfassenderen Eindruck.
Zu empfehlen sind hauptsächlich diese zwei:
1. C++ Primer
C++ Primer | ISBN: 9783827326126
2. Thinking in C++ 1&2: http://mindview.net/Books/TICPP/ThinkingInCPP2e.htmlZudem würde ich im Inet noch diese C++ Standardbibliothek Referenz empfehlen:
http://www.cpluslus.com/reference/Sie ist allerdings nicht ganz vollständig. Fehlen tut allerdings nicht all zu viel und wenn man wirklich eine vollständige Dokumentation möchte, dann gibt es da auch gute Bücher

Grüssli
-
Was Tutorials betrifft, gabs hier kürzlich einen Thread dazu: http://www.c-plusplus.net/forum/viewtopic-var-t-is-224167.html
-
Also in deinem Falle reicht das Meyers Singleton (von Dravere vorgestellt) völlig.
Wenn du tatsächlich über zerstörung bestimmen willst, dann empfehle ich dir das Phönix Singletonmuster anzuschauen.
-
Mal im Ernst:
Du erstellst ein Singleton. Das Singleton-Pattern garantiert, dass es in einem Programm nur eine einzige Instanz der Singletonklasse geben kann. Es lässt sich nicht Kopieren und auch nicht durch den Benutzer instanziieren. Die einzige Möglichkeit die (einzige) Instanz zu erzeugen, ist der erste Aufruf von getInstance().
Es muss also nicht geprüft werden, ob zwei Referenzen auf das Singleton auf das Singleton (
) zeigen. Das ist durch das Pattern bereits implizit vorgegeben.drakon schrieb:
Also in deinem Falle reicht das Meyers Singleton (von Dravere vorgestellt) völlig.
Wenn du tatsächlich über zerstörung bestimmen willst, dann empfehle ich dir das Phönix Singletonmuster anzuschauen.Wie kommst Du aufgrund des Threads auf solch recht komplizierte Teile wie das Phönix Singleton? Er hat doch gar nicht nach der Lebensdauer des Singletons gefragt?!
Das Phönix Singleton macht nur Sinn, wenn es beim Beenden des Programms zu irgendwelchen Race Conditions zwischen verschiedenen, voneineinander abhängigen Singletons kommt. Das der TO solche Probleme hat, wage ich mal zu bezweifeln.
(Mal davon abgesehen, dass das P.S. auch keine Möglichkeiten bietet, explizit über den Zerstörungszeitpunkt zu bestimmen)