Singleton als Template
-
Ich bin auf der Suche nach einer einfachen Möglichkeit Klassen als Singleton bereit zu stellen.
Folgender Ansatz als Template:
template<typename T>class Singleton{ private: Singleton(const T& type) {} const T& operator=(const T& type) {} protected: Singleton(); ~Singleton(); public: static T& getInstance() { static T type; return type; } };Nun meine Fragen dazu:
Gibt es eine einfache Möglichkeit folgendes zu realisieren:
void foo() { if (error) Logfile::getInstance.log("some message"); //erwünscht } void bar() { if (error) Singleton<Logfile>::getInstance.log("some message"); //nicht erwünscht }Darüber hinaus bin ich auf der Suche nach einer einfachen Möglichkeit ein Singleton dahingehend zu überwachen, dass ich weiß wann es zerstört wird. Zur Zeit wird es imho durch static am Anfang meines Programms erstellt und erst am Ende wieder zerstört. Oder wird es erst beim ersten Aufruf erzeugt und wie sieht es mit der Abbaureihenfolge aus?
Danke!
-
Du musst deine Singleton Klasse dann eben von der Basis ableiten, also so:
class logfile : public singleton<logfile> { // bla };
-
typedef Singleton<Logfile> LogFile
-
Zur Zeit wird es imho durch static am Anfang meines Programms erstellt und erst am Ende wieder zerstört.
Nicht ganz ! Dein Singleton wird erst erstellt sobald du die Funktion getInstance() aufrufst, vorher ist da noch nichts
