Singleton vs globale Variable
-
314159265358979 schrieb:
volkard schrieb:
Gibt es Singletons, die auf dem Stack leben?
Ist das nicht der Normalfall?
Das wäre nicht mit einer "lazy" Instanziierung vereinbar.
-
314159265358979 schrieb:
volkard schrieb:
Gibt es Singletons, die auf dem Stack leben?
Ist das nicht der Normalfall?
Ich denke eher dass die Data Section und nicht der Stack der Normalfall ist.
Foo* Foo::get_instance() { static Foo foo; return &foo; }
Ist doch eine gewöhnliche Implementierung und da landets sicher nicht auf dem Stack.
-
Ja, Irrtum. Ich meinte natürlich die Variante von Ethon.
-
So kommen wir nicht weiter.
-
314159265358979 schrieb:
Ja, Irrtum. Ich meinte natürlich die Variante von Ethon.
Es wurde doch schon gesagt, dass da nichts auf dem Stack liegt. Deine Inkompetenz tut langsam weh
-
OhMan... schrieb:
314159265358979 schrieb:
Ja, Irrtum. Ich meinte natürlich die Variante von Ethon.
Es wurde doch schon gesagt, dass da nichts auf dem Stack liegt. Deine Inkompetenz tut langsam weh
Es wurde festgestellt, daß da normalerweise nichts auf dem Stack liegt.
Es wurde fälschlicherweise behauptet, daß da immer nichts auf dem Stack liegt. Von Dir.
Wie immer sind die Halbfachleute bei Programmierthemen die lautesten Schreihälse. Diesmal bist Du es.
-
edit: zu lahm
-
volkard schrieb:
OhMan... schrieb:
314159265358979 schrieb:
Ja, Irrtum. Ich meinte natürlich die Variante von Ethon.
Es wurde doch schon gesagt, dass da nichts auf dem Stack liegt. Deine Inkompetenz tut langsam weh
Es wurde festgestellt, daß da normalerweise nichts auf dem Stack liegt.
Es wurde fälschlicherweise behauptet, daß da immer nichts auf dem Stack liegt. Von Dir.
Wie immer sind die Halbfachleute bei Programmierthemen die lautesten Schreihälse. Diesmal bist Du es.Eine statisch lokale Variable liegt nicht auf dem Stack. Also mach hier nicht auf superschlau alter Mann.
-
Ich glaub manch einer sollte den Thread hier nochmal aufmerksam lesen, bevor er postet...
-
tststs schrieb:
Eine statisch lokale Variable liegt nicht auf dem Stack. Also mach hier nicht auf superschlau alter Mann.
Es geht mir doch nicht um den Meyers-Singleton. Und ich möchte beleuchten, inwiefern die beiden Konzepte orthogonal sind. Aber hier ist das falsche Forum dafür. Zu trollig.
-
OhMan... schrieb:
314159265358979 schrieb:
Ja, Irrtum. Ich meinte natürlich die Variante von Ethon.
Es wurde doch schon gesagt, dass da nichts auf dem Stack liegt. Deine Inkompetenz tut langsam weh
Du bist unregistriert, also nicht ernst zu nehmen.
P.S.: Ich weiß schon, dass der gloable Speicher nicht der Stack ist. Ich habe mich vertan...
-
314159265358979 schrieb:
OhMan... schrieb:
314159265358979 schrieb:
Ja, Irrtum. Ich meinte natürlich die Variante von Ethon.
Es wurde doch schon gesagt, dass da nichts auf dem Stack liegt. Deine Inkompetenz tut langsam weh
Du bist unregistriert, also nicht ernst zu nehmen. ;).
Und dich kann man trotz Registrierung nicht ernst nehmen.
-
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; } };