|  |   | 
| (18 intermediate revisions by 2 users not shown) | 
| Line 1: | Line 1: | 
| − | === C++ ===
 | + | #REDIRECT [[Main Page]] | 
| − | <source lang="cpp">
 | + |  | 
| − |   | + |  | 
| − | template<class T>
 | + |  | 
| − | class Singleton
 | + |  | 
| − | {
 | + |  | 
| − | public:
 | + |  | 
| − |     // Guaranteed to be destroyed.
 | + |  | 
| − |     // Instantiated on first use.
 | + |  | 
| − |     static T& GetInstance() { static T instance; return instance; }
 | + |  | 
| − | private:
 | + |  | 
| − |     Singleton();
 | + |  | 
| − |     ~Singleton();
 | + |  | 
| − |     Singleton(const Singleton &) {}; // Don't Implement
 | + |  | 
| − |     Singleton& operator=(const Singleton<T>&) {}; // Don't Implement
 | + |  | 
| − |     Singleton* operator&() {};
 | + |  | 
| − | };
 | + |  | 
| − | class A : public Singleton<A>
 | + |  | 
| − | {
 | + |  | 
| − | friend class Singleton<A>;
 | + |  | 
| − | private:
 | + |  | 
| − |     A(); // Should be private
 | + |  | 
| − |     ~virtual A();
 | + |  | 
| − |     A(const A&);
 | + |  | 
| − |     A& operator=(const A&);
 | + |  | 
| − |     A* operator&();
 | + |  | 
| − | };
 | + |  | 
| − | </source>
 | + |  |