C++完美实现Singleton模式.pdf

C++完美实现Singleton模式.pdf

ID:52443485

大小:101.53 KB

页数:8页

时间:2020-03-27

C++完美实现Singleton模式.pdf_第1页
C++完美实现Singleton模式.pdf_第2页
C++完美实现Singleton模式.pdf_第3页
C++完美实现Singleton模式.pdf_第4页
C++完美实现Singleton模式.pdf_第5页
资源描述:

《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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。