一个模板单例的实现

来源:互联网 发布:想学游戏编程 编辑:程序博客网 时间:2024/05/21 19:19

以前看过高手写的单例实现,也是利用继承模板基类来实现,最近正要用到单例模式,却苦于找不到以前高手的代码,于是就自己动手实现,代码如下

template<typename T>class Singletion{friend T;private:Singletion(){}virtual ~Singletion(){}static T* pObject;//利用此类析构函数释放单例实例内存class CCarbageCollector{public:~CCarbageCollector(){printf("~CCarbageCollector");if(Singletion<T>::pObject != NULL){delete Singletion<T>::pObject;printf("Object delete");}}};protected://提供给单例类的初始化接口virtual void Init()=0;public://获取单例inline static T* GetSingleton(){//用于系统退出时释放单例实例的内存static Singletion<T>::CCarbageCollector CarCo;pObject==NULL && (pObject=new T);return pObject;}};template<typename T>T* Singletion<T>::pObject = NULL;#define SINGLETON_INIT(ClassType)\friend ClassType* Singletion<ClassType>::GetSingleton();\friend Singletion<ClassType>::CCarbageCollector;\private:\ClassType(){Init();}\virtual ~ClassType(){}\virtual void Init()//单例class B:public Singletion<B>{SINGLETON_INIT(B){printf("Singleton Init");}};int _tmain(int argc, _TCHAR* argv[]){B *b = B::GetSingleton();//B bb; //->error//new B; //->error::system("pause");}


原创粉丝点击