欢迎来到天天文库
浏览记录
ID:52443485
大小:101.53 KB
页数:8页
时间:2020-03-27
《C++完美实现Singleton模式.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C++完美实现Singleton模式Singleton模式是常用的设计模式之一,但是要实现一个真正实用的设计模式却也不是件容易的事情。1.标准的实现classSingleton{public:staticSingleton*Instance(){if(0==_instance){_instance=newSingleton;}return_instance;}protected:Singleton(void){}virtual~Singleton(void){}staticSingleton*_instance;};这是教科书上使用的方法。看起来没有什
2、么问题,其实包含很多的问题。下面我们一个一个的解决。2.自动垃圾回收上面的程序必须记住在程序结束的时候,释放内存。为了让它自动的释放内存,我们引入auto_ptr改变它。#include#includeusingnamespacestd;classSingleton{public:staticSingleton*Instance(){if(0==_instance.get()){_instance.reset(newSingleton);}return_instance.get();}protected:Single
3、ton(void){cout<<"CreateSingleton"<;staticauto_ptr_instance;};//Singleton.cppauto_ptrSingleton::_instance;3.增加模板在我的一个工程中,有多个的Singleton类,对Singleton类,我都要实现上面这一切,这让我觉得烦
4、死了。于是我想到了模板来完成这些重复的工作。现在我们要添加本文中最吸引人单件实现:/********************************************************************(c)2003-2005C2217StudioModule:Singleton.hAuthor:YangjunD.Created:9/3/200523:17Purpose:ImplementsingletonpatternHistory:**************************************************
5、*******************/#pragmaonce#includeusingnamespacestd;usingnamespaceC2217::Win32;namespaceC2217{namespacePattern{templateclassSingleton{public:staticinlineT*instance();private:Singleton(void){}~Singleton(void){}Singleton(constSingleton&){}Singleton&operator=(c
6、onstSingleton&){}staticauto_ptr_instance;};templateauto_ptrSingleton::_instance;templateinlineT*Singleton::instance(){if(0==_instance.get()){_instance.reset(newT);}return_instance.get();}//Classthatwillimplementthesingletonmode,//mustusethemacroinit's
7、delarefile#defineDECLARE_SINGLETON_CLASS(type)friendclassauto_ptr;friendclassSingleton;}}4.线程安全上面的程序可以适应单线程的程序。但是如果把它用到多线程的程序就会发生问题。主要的问题在于同时执行_instance.reset(newT);就会同时产生两个新的对象,然后马上释放一个,这跟Singleton模式的本意不符。所以,你需要更加安全的版本:/********************************************
8、************************(c)2003-2005C2217Studio
此文档下载收益归作者所有