Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

21

15.06.2008, 14:40

Zitat von »"Das Gurke"«

Deine Methode sind schlicht und einfach globale Variablen und haben mit Singletons daher nur am Rande was zu tun.

Nur am Rande? Singletons kapseln globale Variablen. Singleton sind genauso schlimm wie globale Variablen, meinen manche. Ich selbst halte Singletons fuer "boese", egal wie sie implementiert sind. Hier mal ein zusammenfassender Thread auf gamedev.net:
http://www.gamedev.net/community/forums/topic.asp?topic_id=463624&whichpage=1&#3055440

Klar sind Heap-Allocationen "teuer", aber wenn sie nur einmal und das vielleicht noch am Anfang des Programms geschehen, so faellt es nicht ins Gewicht. (Fehleranfaellig? Einfach Singletons vermeiden.)

Zitat von »"Das Gurke"«

Namespaces sollen Namenskonflikte verhindern und nichts anderes! Sie sind nicht eingeführt worden um es Programmierern zu erleichtern, schlampigen Code zu verstecken!

Zitat

Namespace [...] teilen den Code in logische Einheiten auf.

Nichts anderes? Wer lesen kann, ist klar im Vorteil. Wenn es nur um Namenskonflikte ginge, so haetten namespaces keinen Vorteil gegenueber einer einfachen Praefix/Postfix-Vereinbarung.

Ich zitiere mal aus "Die C++ Programmiersprache" von Stroustrup, 8.2:

Zitat

Ein Namensbereich (englisch: namespace) ist ein Mechanismus zum Ausdruecken logischer Gruppierungen. Das heisst, wenn einige Deklarationen nach bestimmten Kriterien logisch zusammengehoeren, koennen sie einem gemeinsamen Namensbereich zugeordnet werden, um diese Tatsache auszudruecken.

Danach wird als Beispiel das Interface eines Parser in namespaces gruppiert. Es geht um logische Strukturen im Code, Teilsysteme, Interfaces etc. Das es nicht zu Namenskollisionen kommen soll, ist nur ein Teilaspekt.

Das Singleton durch einen namespace zu ersetzen, hat auch nichts damit zu tun, schlampigen Code zu verstecken. Die "globale" Variable ist nur im entsprechenden namespace sichtbar. Auf diese kann auch nur mittels der Funktionen im namespace zugegriffen werden. D.h. sie ist nicht mehr wirklich global, sofern man ueberhaupt Zustandsinformationen benoetigt.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

22

15.06.2008, 15:02

Zitat von »"knivil"«

Zitat von »"Das Gurke"«

Deine Methode sind schlicht und einfach globale Variablen und haben mit Singletons daher nur am Rande was zu tun.

Nur am Rande? Singletons kapseln globale Variablen. Singleton sind genauso schlimm wie globale Variablen, meinen manche. Ich selbst halte Singletons fuer "boese", egal wie sie implementiert sind. Hier mal ein zusammenfassender Thread auf gamedev.net:
http://www.gamedev.net/community/forums/topic.asp?topic_id=463624&whichpage=1&#3055440

Klar sind Heap-Allocationen "teuer", aber wenn sie nur einmal und das vielleicht noch am Anfang des Programms geschehen, so faellt es nicht ins Gewicht.


Die Diskussion ob, und wann, man Singletons verwenden sollte ist eine komplett Andere und hier überhaupt nicht von Relevanz.
Und zu der einmaligen Heapallokation hab ich mich ja hinreichend geäußert.

Zitat


(Fehleranfaellig? Einfach Singletons vermeiden.)


Die Verwendung von Singletons ist keine Garantie für Fehleranfälligen Code. Aber wie gesagt, die Diskussion dreht sich nicht über Vor- und Nachteile von Singletons.

Übrigens: Singletons sind in erster Linie kein nicht als Ersatz für globale Variablen gedacht.
@D13_Dreinig

23

15.06.2008, 16:47

Wenn es um Singletons geht, dann ist die Frage: Macht ein Singleton hier Sinn? immer von Relevanz. Schwierigkeiten bei der Implementation von Singletons kann man sehr gut umgehen, indem man aus gutem Grund auf Singletons verzichtet. Wenn man aber unbedingt will, dann schreibt man einfach ab: http://en.wikipedia.org/wiki/Singleton_pattern#C.2B.2B .

Zitat

Übrigens: Singletons sind in erster Linie kein nicht als Ersatz für globale Variablen gedacht.

Ich weiss nicht genau, wie ich die doppelte Verneinung interpretieren soll. Sicher ist ein Singleton nicht als Ersatz fuer globale Variablen gedacht, leider ist die Gefahr sehr gross, es als solche zu missbrauchen. Mit getInstance() kann ich ueberall auf das Objekt zugreifen. Somit hat ein Singleton den Charakter eines globalen Objekts.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

24

15.06.2008, 17:02

Zitat von »"knivil"«

Wenn es um Singletons geht, dann ist die Frage: Macht ein Singleton hier Sinn? immer von Relevanz.


Nein, wenn es um Singletons geht ist die Frage "macht die Verwendung von Singletons Sinn" nicht zwangsläufig von Relevanz. Es ist mit Sicherheit interessant, aber hier egtl nicht Teil der Antwort.
Wir können gern einen eigenen Thread eröffnen in dem wir über den Sinn des Singletonpatterns diskutieren.

Zitat von »"knivil"«

Schwierigkeiten bei der Implementation von Singletons kann man sehr gut umgehen, indem man aus gutem Grund auf Singletons verzichtet. Wenn man aber unbedingt will, dann schreibt man einfach ab: http://en.wikipedia.org/wiki/Singleton_pattern#C.2B.2B .


Nein, die Schwierigkeiten umgeht man nicht wenn man den Code abtippt. Man schiebt sie höchstens auf... Wie gesagt, verschiedene Situationen fordern verschiedene Singletonvarianten (wenn man denn Singletons verwenden will).

Zitat von »"knivil"«


Zitat

Übrigens: Singletons sind in erster Linie kein nicht als Ersatz für globale Variablen gedacht.

Ich weiss nicht genau, wie ich die doppelte Verneinung interpretieren soll. Sicher ist ein Singleton nicht als Ersatz fuer globale Variablen gedacht, leider ist die Gefahr sehr gross, es als solche zu missbrauchen. Mit getInstance() kann ich ueberall auf das Objekt zugreifen. Somit hat ein Singleton den Charakter eines globalen Objekts.


Sorry, das kein gehört da nicht mit rein.
@D13_Dreinig

Werbeanzeige