Iterator
-
Nein. Aber du könntest da etwas mit einem Singleton machen, welches sich schon früher zerstören lässt.
Ob du das wirklich brauchst ist eine andere Frage, aber dafür müsstest du mehr über die Umstände sagen.
-
ja es geht schon um Singleton

wie ist das eigentlich wenn man ein neues design pattern gefunden hab.
also die Lösung zu einem Problem das bislang ungelöst war.Muss ich es anmelden ? Muss ich ein buch veröffentlichen ?
-
Ja, und zwar innerhalb von zwei Monaten. Genauso wie du für jede Klasse einen Iterator nutzen musst

-
beim Singleton gibt es ja 3 verschiedene Lösungen .
Welche nimmt man denn ?
-
Wahrscheinlich diejenige, die für dein Problem am besten passt. Wobei es natürlich auch sein könnte, dass zwei davon nur zum Spass erfunden wurden. Nimm dann einfach die dritte.
-
#include <iostream> #include <stdio.h> using namespace std; class Singleton { private: //Konstruktor private, damit man sich keine Instanzen holen kann. Singleton(); //Den Kopierkonstruktor schützen um zu vermeiden, dass das Objekt unbeabsichtigt kopiert wird. Singleton(const Singleton& cc); public: ~Singleton(); static Singleton& getInstance(); }; Singleton& Singleton::getInstance() { static Singleton instance; return instance; }; int main() { Singleton x.getInstance(); // geht nicht :( }Wie kann ich überhaupt eine Instanz von Singleton anlegen ?
So funktionierts jedenfalls nicht.
-
Singletone* s = Singletone::getInstance()1 Sekunde Schneller

Aber ist meine Lösung mit Singletone* grundlegend falsch
?
-
Zum Beispiel so:
Singleton& x=Singleton::getInstance();
-
Falls die Referenz global ist, musst du noch aufpassen, dass sie rechtzeitig initialisiert wird. Ich hatte mal genau dieses Problem und als Folge statt einer Referenz ein Makro verwendet.
Blackskyliner schrieb:
Aber ist meine Lösung mit Singletone* grundlegend falsch
?In diesem Fall schon, da eine Referenz und kein Zeiger zurückgegeben wird.
-
Um noch die Frage nebenbei zu stellen. Ist der Singletone angenehmer wenn es bloß eine Referenz ist oder aber ist der Pointer-Weg (So wie ich ihn bei meinem Singletone nutze) auch "legetim", im Sinne von sinnvoll oder sollte ich lieber mit Referenzen arbeiten, von wegen Geschwindigkeit, Sicherheit, etc.?
-
Blackskyliner schrieb:
Singletone* s = Singletone::getInstance()Aber ist meine Lösung mit Singletone* grundlegend falsch
?Wenn Du Zeiger lieber hast, kannst Du auch Zeiger nehmen.
Singletone* s = &Singletone::getInstance();
-
Blackskyliner schrieb:
Um noch die Frage nebenbei zu stellen. Ist der Singletone angenehmer wenn es bloß eine Referenz ist oder aber ist der Pointer-Weg (So wie ich ihn bei meinem Singletone nutze) auch "legetim", im Sinne von sinnvoll oder sollte ich lieber mit Referenzen arbeiten, von wegen Geschwindigkeit, Sicherheit, etc.?
Alle Wege führen von Rom weg.
Bei Singletons hat Du enorme Freiheit, es zu machen, wie Du magst. Der Meyers-Singleton paßt schon verdammt oft. Aber sei flexibel. Wie wir hören dürfen, weicht man manchmal sogar auf Makros aus.
-
Singleton* x=Singleton::getInstance();Fehlermeldung:
Fehler 1 error C2440: 'Initialisierung': 'Singleton' kann nicht in 'Singleton *' konvertiert werden
wo wird eigentlich geprüft dass nicht mehr als eine Instanz angelegt wurde ?
-
Wie schon 1-2 Posts nach meinem geklärt, hatte ich mich etwas vertan und statt einem Pointer * muss nur eine Referenz & des Variablentyps genutzt werden.
Hatte nicht darauf geachtet, das dein getInstance() ja den Typt Singleton& zurück gibt 
Dann sollte der Fehler auch weg sein.
Also:
Singleton& s = Singleton::getInstance();
-
blurry333 schrieb:
wo wird eigentlich geprüft dass nicht mehr als eine Instanz angelegt wurde ?
Vom static.
-
int main() { Singleton s = Singleton::getInstance(); }Fehlermeldung:
Fehler 1 error C2248: "Singleton::Singleton": Kein Zugriff auf private Member, dessen Deklaration in der Singleton-Klasse erfolgte.
-
da fehtl ja auch nen &
-
trotzdem gehts net.
Dann kommt ein Linker fehler
Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""private: __thiscall Singleton::Singleton(void)" (??0Singleton@@AAE@XZ)" in Funktion ""public: static class Singleton & __cdecl Singleton::getInstance(void)" (?getInstance@Singleton@@SAAAV1@XZ)". pause.obj
-
Warum geht das dann..
#include <iostream> #include <stdio.h> using namespace std; int& funk(int& x) { return x; } int main() { int p=7; int zahl; zahl=funk(p); // obwohl zahl keine Referenz // funktionierts }
-
1. wieso gehts hier eigtl um singeltons statt iteratoren?
2. nachdenken 4tw...
struct Singleton { private: public: Singleton& get_instance() { static Singleton instance; return instance; } }; int main() { Singleton& s = Sinlgeton::get_instance(); }Bis hierhin ist noch alles klar, richtig?
Jetzt müssen wir allerdings noch dafür sorgen, dass nirgendwo ein anderes Singleton-Objekt erstellt werden kann
Wir müssen also die KOnstruktoren(copy und standard) private machen.
Allerdings müssen wir den standard-CTor auch implementieren, weil wir ihn selbst ja benutzen - und das hast du offensichtlich nicht getan.bb
PS:
#include <stdio.h>der Header heißt schon seit 11 Jahrencstdio