Singleton vs globale Variable
-
Alles eine Willensfrage.
-
314159265358979 schrieb:
Alles eine Willensfrage.
Womit wir schon fast bei Gott wären
Singletons haben ein besseres Image; sie sind konform mit der gängigen Lehrmeinung über gutes Design/gute Patterns. Als Student, oder sonst jemand, dessen Code bewertet wird, kann deren Verwendung also Vorteile bringen ggü. globalen Variablen. Das heißt natürlich nicht, dass sie in der Praxis besser sind.
-
dot schrieb:
designpatterns schrieb:
Was ist der Vorteil von Singletons über globale Variablen?
Die Frage ist sinnlos, da Singleton und globale Variable zwei völlig orthogonale Konzepte sind.
-
dot schrieb:
dot schrieb:
designpatterns schrieb:
Was ist der Vorteil von Singletons über globale Variablen?
Die Frage ist sinnlos, da Singleton und globale Variable zwei völlig orthogonale Konzepte sind.
Haben allerdings gemeinsam beide das Gegenteil von gutem Softwaredesign zu sein.
-
Mr X schrieb:
Singletons haben ein besseres Image; sie sind konform mit der gängigen Lehrmeinung über gutes Design/gute Patterns. Als Student, oder sonst jemand, dessen Code bewertet wird, kann deren Verwendung also Vorteile bringen ggü. globalen Variablen. Das heißt natürlich nicht, dass sie in der Praxis besser sind.
Ähmm, ja. Bitte erkläre mir mal folgenden Unterschied
class A {}; // global variable extern A instance;
class B { private: static B _instance; // nur ein Objekt möglich B () {}; virtual ~B() {}; public: static B* getInstance () { return &_instance; }; // in der *.cpp B B::_instance;
Verwendet nun die Klasse B eine globale Variable?
Wo liegt der Unterschied bei B zu Singelton?
Meiner bescheidener Meinung nach, nichts.class C { private: static C *_instance; static boost::mutex _m; // nur ein Objekt möglich C () {}; virtual ~C() {}; public: static C* getInstance () { boost::mutex::scoped_lock lock (C::_m); if ( C::_instance == NULL ) C::_instance = new C (); return _instance; }; // in der *.cpp C * C::_instance = NULL; boost::mutex C::_m;
Was verwendet ihr? Variante B oder C und warum? Gibt es einen Nachteil (bin, shared/static lib) von den beiden letzten Varianten?
Gruß, Thomas
-
volkard schrieb:
toni single schrieb:
Ein Singleton ist dazu da, dass man von einer Klasse nur eine Instanz erstellen kann und nicht eine globale Variable nachbaut. Der vergleich ist also sinnlos.
Na, sie haben schon erstaunlich viele Ähnlichkeiten, über die man sich immer wieder unterhalten muß.
Gibt es Singletons, die auf dem Stack leben?
Lies den ersten Teil meines Satzes nochmal und du merkst, dass deine Stack-Frage falsch ist.
-
toni single schrieb:
volkard schrieb:
toni single schrieb:
Ein Singleton ist dazu da, dass man von einer Klasse nur eine Instanz erstellen kann und nicht eine globale Variable nachbaut. Der vergleich ist also sinnlos.
Na, sie haben schon erstaunlich viele Ähnlichkeiten, über die man sich immer wieder unterhalten muß.
Gibt es Singletons, die auf dem Stack leben?
Lies den ersten Teil meines Satzes nochmal und du merkst, dass deine Stack-Frage falsch ist.
Ich weiss, man wird mich verhauen:
class StackSingleton { static bool isInvalid = false; public: StackSingleton() { if(isInvalid) { throw std::exception("meeh"); } isInvalid = true; } };