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
Administrator
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Nein, eigentlich ist das keine Geschmackssache, denn Singleton hat einen einzigen Zweck. Wenn dieser nicht benötigt wird, sind sie Unfug und nichts weiter als versteckte globale Variablen. Da ist eine globale Variable jederzeit sinnvoller als ein Singleton und man würde sie auch direkt als solche erkennen. Wir reden hier schließlich auch nicht von einem einfachen globalen Integer (denn ein Singleton ist keiner!), sondern von einer Klassen-Instanz. Ob ich die per "Classtype::getInstance()" hole oder direkt über den Namen der globalen Variable verwende, macht funktional gesehen keinen Unterschied. Semantisch betrachtet allerdings schon. Die aufgerufenen Methoden sorgen übrigens für den korrekten Zustand des Objekts und da ist es egal, ob dieses ein Singleton ist oder eine globale Variable. Ein Singleton hat nur einen Zweck, nämlich dass es unter keinen Umständen mehr als eine Instanz geben darf. Wird dieser nicht benötigt, ist das Singleton architektonischer Unsinn und eine globale Variable tut es genauso und das deutlich klarer.Ob man Singletons verwenden sollte oder nicht ist immer Geschmackssache.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
#ifndef SINGLETON_HPP #define SINGLETON_HPP template <class T> class TSingleton { protected: // Membervariablen static T *m_pSingleton; // Statisches Objekt public: // Memberfunktionen // Destruktor // virtual ~TSingleton () { } // Get // // Aufgabe: Wenn nötig, statisches Objekt erzeugen und // Zeiger darauf zurückgeben // inline static T* Get () { // Existiert schon eine Instanz? if (!m_pSingleton) m_pSingleton = new T; // Nein, dann neue Instanz erzeugen // Zeiger auf die Instanz zurückgeben return (m_pSingleton); } // Get // Statisches Objekt freigeben // static void Del () { // Gab es eine Instanz? if (m_pSingleton) { delete (m_pSingleton); // Ja, dann freigeben m_pSingleton = NULL; // und Zeiger auf NULL setzen } } // Del }; // Die statische Variable erzeugen // template <class T> T* TSingleton<T>::m_pSingleton = 0; #endif |
Werbeanzeige