[C/C++] Singleton Klasse oder globale Variable

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von MasterJulian, 21. Mai 2013 .

  1. 21. Mai 2013
    Singleton Klasse oder globale Variable

    Ich arbeite mich gerade in C++ und SDL2 ein. Im Moment schreibe ich mir Hilfsfunktionen um schneller Sachen auf den Bildschirm zu bekommen. Ich habe z.B. in einer Datei screen.cpp u.A. Funktionen zum initialisieren und schließen des Bildschirmes. Hierbei handelt es sich nicht um eine Klasse sondern eher um ein typisches "C-File" mit globalen Variablen (Referenzen) auf das Fenster und den Renderer. In der dazugehörigen screen.hpp befinden sich nur die Funktionsprototypen, aber nicht die Variablen (die werden ja nur von der screen.cpp benötigt). Ich habe bis jetzt zwar schon einiges in C aber noch nahezu nichts in C++ gemacht. Ist es sinnvoll, diese Sachen als Singleton zu implementieren oder tut es die "C Lösung" auch. Eine normale Klasse kommt nicht in Frage, denn der Bildschirm darf nur einmal existieren (auch wen SDL2 multiwindow fähig ist). Ich habe nahezu keine Erfahrung in C++ deshalb wende ich mich hier an die erfahrenen Programmiere (evtl. auch die, die c++ beruflich einsetzten inkl. Designregeln etc...). Was ist in so einer Situation "best practice" und wird so ein "C/C++ Gemisch" überhaupt geduldet?
     
  2. 22. Mai 2013
    AW: Singleton Klasse oder globale Variable

    Die meisten werden dir wahrscheinlich von jeglicher Art von Singletons und globalen Variablen abraten und zum weiterreichen der Zeiger empfehlen.

    Ich als Hobbyprogrammierer bevorzuge da jedoch static Membervariablen sowie Memberfunktionen um ggf. einen Zugriff besser zu steuern. Also ähnlich einem Singleton.

    Mfg Rushh0ur
     
  3. 22. Mai 2013
    Zuletzt bearbeitet: 22. Mai 2013
    AW: Singleton Klasse oder globale Variable

    Bei Singletons hab ich die Erfahrung gemacht, dass ich das im Nachhinein eh wieder umschreibe um die Klassen normal zu nutzen.
    Meiner Meinung nach ist das ein Anti-Pattern.

    Es spricht im Grunde nichts gegen normale Funktionen.
    Warten wir mal auf terraNova
     
  4. 22. Mai 2013
    Zuletzt bearbeitet: 22. Mai 2013
    AW: Singleton Klasse oder globale Variable

    Musst halt schon wissen was du willst. Willst Du einzelne Variablen ansprechen oder lieber ein Objekt, dass den Kram für dich erledigt?

    Den Unterschied zwischen C und C++ muss man dir ja wohl nicht mehr erläutern, deshalb frag ich mich, wieso die Frage? C++ ist eher objektorientiert und daher sollte man diese Möglichkeit auch nutzen (Wobei globale Variablen selbst in C unschön sind und man dort lieber mit Strukturen rumhantiert, siehe Rushh0ur und der Zeigerzauberei).

    Für mich sieht es momentan so aus, als würdest du rudimentär etwas umzusetzen zu versuchen, daher würd ich einfach mal empfehlen, das ganze irgendwie auf einen Nenner zusammenzufassen damit Du möglichst auf zusammenhangslose Komponenten verzichten kannst (Sprich, keine ganze Horde einzelner Variablen die mit nem Besen durch die Gegend fliegen). So kannst Du dir auch Klassen/Strukturen (C) oder - wenn nötig - Singletons zusammenbauen und einen besseren Überblick behalten bzw. das ganze etwas ordentlicher gestalten. Ansonsten musst Du dich halt damit abfinden einen Haufen einzelner globale Variablen zu verwalten und das werden garantiert immer mehr.
     
    1 Person gefällt das.
  5. 22. Mai 2013
    AW: Singleton Klasse oder globale Variable

    Dann hast du es von vorne herein falsch angewandt bzw. dein Konzept war inkonsistent. Man sollte Singleton nur da benutzen wo es auch wirklich nötig ist, dass nur eine Instanz der Klasse existiert.
     
    1 Person gefällt das.
  6. 22. Mai 2013
    Zuletzt bearbeitet: 22. Mai 2013
    AW: Singleton Klasse oder globale Variable

    Wenn im Programm eine zweite Instanz einer Klasse genommen wird, wo eigl. nur eine zulässig wäre, dann läuft wo anders was falsch. Wobei ich dir nicht absprechen will, dass es Anwendungsfälle gibt, das sind dann aber meist eher sehr sehr spezifische Dinge.

    Daher lieber eine sinnige Doku dazu erstellen, dann spart man sich nen rewrite wenn doch mal zwei (oder mehr) Instanzen nebeneinander laufen sollen.

    In diesem Fall z.B. wenn ein zweiter Screen unterstützt werden soll.

    Meine 2¢ dazu.
     
    1 Person gefällt das.
  7. 22. Mai 2013
    AW: Singleton Klasse oder globale Variable

    Ich verwende in Java auch Singletons für die GUI.
    Ich finde das sauberer, als wenn man statische Variablen nutzt!
     
    1 Person gefällt das.
  8. 22. Mai 2013
    AW: Singleton Klasse oder globale Variable

    Nimm doch SFML und spar die Kopfschmerzen
     
    1 Person gefällt das.
  9. 22. Mai 2013
    AW: Singleton Klasse oder globale Variable

    Danke für die vielen Antworten. Ich werde wohl doch erstmal eine normale Klasse daraus basteln. Ich programmiere ja sowieso alleine daran und weiß, dass ich nur ein Objekt dieser Klasse haben werde. Ich greife im Moment ja auch nicht auf die Variablen direkt zu (nur indirekt in den "Hilfsfunktionen", die main.cpp kennt diese Variablen gar nicht), später werden das halt dann Instanzvariablen.
    Mit SDL selber habe ich keine Probleme, aber ja die Wahl zwischen SDL und SFML ist eher aus dem Bauch heraus gefallen
     
  10. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.