#ifndef SINGLETONBASE_H #define SINGLETONBASE_H //做一个单例 #include #include //#include template class SingletonBase { public: SingletonBase() { this->initInstance(); } // ~SingletonBase(); void add(const KeyType& key,const ValueType& val) { QHash *t=SingletonBase::ht; (*t)[key]=val; } bool contains(const KeyType& key) { return SingletonBase::ht->contains(key); } ValueType& get(const KeyType& key) { QHash *t=SingletonBase::ht; return (*t)[key]; } QList keys() { return SingletonBase::ht->keys(); } private: void initInstance() { // if(SingletonBase::ht) // { // delete SingletonBase::ht; // SingletonBase::ht==NULL; // } if(!SingletonBase::ht) { SingletonBase::ht=new QHash; } } protected: class CG // 它的唯一工作就是在析构函数中删除CSingleton的实例 { public: ~CG() { if (SingletonBase::ht) delete SingletonBase::ht; } }; static CG Garbo; // 定义一个静态成员,在程序结束时,系统会调用它的析构函数 static QHash *ht; }; template QHash *SingletonBase::ht=NULL; #endif // SINGLETONBASE_H