C++完美实现Singleton模式.pdf
《C++完美实现Singleton模式.pdf》由会员分享,可在线阅读,更多相关《C++完美实现Singleton模式.pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 C+完美实现 Singleton 模式 Singleton 模式是常用的设计模式之一,但是要实现一个真正实用的设计模式却也不是件容易的事情。Singleton 模式是常用的设计模式之一,但是要实现一个真正实用的设计模式却也不是件容易的事情。1.1.标准的实现标准的实现 class Singleton public:static Singleton*Instance()if(0=_instance)_instance=new Singleton;return _instance;protected:Singleton(void)virtual Singleton(void)static Sin
2、gleton*_instance;这是教科书上使用的方法。看起来没有什么问题,其实包含很多的问题。下面我们一个一个的解决。这是教科书上使用的方法。看起来没有什么问题,其实包含很多的问题。下面我们一个一个的解决。2.2.自动垃圾回收自动垃圾回收 上面的程序必须记住在程序结束的时候,释放内存。为了让它自动的释放内存,我们引入 auto_ptr 改变它。上面的程序必须记住在程序结束的时候,释放内存。为了让它自动的释放内存,我们引入 auto_ptr 改变它。#include#include using namespace std;class Singleton public:static Singl
3、eton*Instance()if(0=_instance.get()_instance.reset(new Singleton);return _instance.get();protected:Singleton(void)cout Create Singletonendl;virtual Singleton(void)cout Destroy Singletonendl;friend class auto_ptr;static auto_ptr _instance;/Singleton.cpp/Singleton.cpp auto_ptr Singleton:_instance;3.3.
4、增加模板增加模板 在我的一个工程中,有多个的 Singleton 类,对 Singleton 类,我都要实现上面这一切,这让我觉得烦死了。于是我想到了模板来完成这些重复的工作。在我的一个工程中,有多个的 Singleton 类,对 Singleton 类,我都要实现上面这一切,这让我觉得烦死了。于是我想到了模板来完成这些重复的工作。现在我们要添加本文中最吸引人单件实现:现在我们要添加本文中最吸引人单件实现:/*(c)2003-2005 C2217 Studio Module:Singleton.h Author:Yangjun D.Created:9/3/2005 23:17 Purpose:
5、Implement singleton pattern History:*/#pragma once#include using namespace std;using namespace C2217:Win32;namespace C2217 namespace Pattern template class Singleton public:static inline T*instance();private:Singleton(void)Singleton(void)Singleton(const Singleton&)Singleton&operator=(const Singleton
6、&)static auto_ptr _instance;template auto_ptr Singleton:_instance;template inline T*Singleton:instance()if(0=_instance.get()_instance.reset(new T);return _instance.get();/Class that will implement the singleton mode,/must use the macro in its delare file#define DECLARE_SINGLETON_CLASS(type)friend cl
7、ass auto_ptr;friend class Singleton;4.4.线程安全线程安全 上面的程序可以适应单线程的程序。但是如果把它用到多线程的程序就会发生问题。主要的问题在于同时执行上面的程序可以适应单线程的程序。但是如果把它用到多线程的程序就会发生问题。主要的问题在于同时执行_instance.reset(new T);就会同时产生两个新的对象,然后马上释放一个,这跟就会同时产生两个新的对象,然后马上释放一个,这跟 Singleton 模式的本意不符。所以,你需要更加安全的版本:模式的本意不符。所以,你需要更加安全的版本:/*(c)2003-2005 C2217 Studio M
8、odule:Singleton.h Author:Yangjun D.Created:9/3/2005 23:17 Purpose:Implement singleton pattern History:*/#pragma once#include using namespace std;#include Interlocked.h using namespace C2217:Win32;namespace C2217 namespace Pattern template class Singleton public:static inline T*instance();private:Sin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 完美 实现 Singleton 模式
限制150内