Singleton

Run Settings
LanguageC++
Language Version
Run Command
#include <iostream> #include <cassert> using namespace std; class data{ public: data(char* text){ this->text = text; } char* getText(){ return text; } private: char* text; }; template <typename T> class Singleton { static T* reference; public: Singleton(void){ assert(!reference); long offset = (long)(T*)1 - (long)(Singleton<T>*)(T*)1; reference = (T*)((long)this + offset); } ~Singleton(void){ assert(reference); reference = 0; } static T& Get(void){ assert(reference); return *reference; } static T* GetPtr(void){ assert(reference); return reference; } }; template <typename T> T* Singleton<T>::reference = 0; class Temp : public Singleton<data>{ public: Temp(char* name){ dataPtr = new data(name); } ~Temp(){ delete dataPtr; } private: data* dataPtr; }; void test(void){ Temp value = Temp("a"); data dataValue = Temp::Get(); cout << *(dataValue.getText()); //delete temp; } int main() { test(); return 0; }
Editor Settings
Theme
Key bindings
Full width
Lines