C++

  1. template<class T>
  2. class Singleton
  3. {
  4. public:
  5. // Guaranteed to be destroyed.
  6. // Instantiated on first use.
  7. static T& GetInstance() { static T instance; return instance; }
  8. private:
  9. Singleton();
  10. ~Singleton();
  11. Singleton(const Singleton &) {}; // Don't Implement
  12. Singleton& operator=(const Singleton<T>&) {}; // Don't Implement
  13. Singleton* operator&() {};
  14. };
  15. class A : public Singleton<A>
  16. {
  17. friend class Singleton<A>;
  18. private:
  19. A(); // Should be private
  20. ~virtual A();
  21. A(const A&);
  22. A& operator=(const A&);
  23. A* operator&();
  24. };