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&();
};