三种实现单件的代码
来源:互联网 发布:人工智能上市企业 编辑:程序博客网 时间:2024/05/02 02:54
/////////////////////第一种SINGLETON模式///////////////////////////////////////
//
// Sphi Middleware
// Copyright (C) 2007, Yuri Ivatchkovitch
// sphi.sourceforge.net
//
////////////////////////////////////////////////////////////////////////////////
#ifndef __SINGLETONOLD_H__
#define __SINGLETONOLD_H__
#pragma warning( disable:4311 )
#pragma warning( disable:4312 )
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
namespace PatternSin
{
template <typename T>
class Singleton
{
protected:
static T* ms_Singleton;
public:
Singleton();
virtual ~Singleton();
static T& GetSingleton();
static T* GetSingletonPtr();
};
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
template <typename T> T* Singleton<T>::ms_Singleton = 0;
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
template <typename T> Singleton<T>::Singleton()
{
if (!ms_Singleton)
{
int offset = (int)(T*)1 - (int)(Singleton <T>*)(T*)1;
ms_Singleton = (T*)((int)this + offset);
}
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
template <typename T> Singleton<T>::~Singleton()
{
if (ms_Singleton)
{
ms_Singleton=0;
}
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
template <typename T> T& Singleton<T>::GetSingleton()
{
return (*ms_Singleton);
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
template <typename T> T* Singleton<T>::GetSingletonPtr()
{
return (ms_Singleton);
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
};
#endif // __SINGLETON_H__
////////////////////////////////第二种Singleton模式/////////////////////////////
template<class T>
class Singleton
{
public:
static T& Instance(); //取得实例
protected:
Singleton(){}
virtual ~Singleton() {}
private:
//防止拷贝复制
Singleton(const Singleton&);
Singleton& operator= (const Singleton&);
};
//取得实例
template<class T>
T& Singleton<T>::Instance()
{
static T instance; //局部静态对象
HWND pHwnd = GetActiveWindow();//不要问我为什么加这句,我也不知道,不加RELEASE不过,一加就过,我试了两天才解决.
return instance;
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////第三种Singleton模式////////////////////////////////////////
#define DECL_SINGLETON(singleton) static singleton *m_p##singleton; static singleton& singleton::p() {return *m_p##singleton;};
#define CREATE_SINGLETON(singleton) static singleton m_##singleton; singleton* singleton::m_p##singleton = &m_##singleton;
EXAMPLE:guiSelectManager、
h文件内
static guiSelectManager *m_pguiSelectManagersingleton;
static guiSelectManager& guiSelectManager::p() { return *m_pguiSelectManagersingleton; }
cpp
static guiSelectManager m_guiSelectManagersingleton;
guiSelectManager* guiSelectManager::m_pguiSelectManager = & m_guiSelectManagersingleton;
区别在哪?STATIC是局部静态变象还是非局部静态对象,参见MORE EFFECT C++
- 三种实现单件的代码
- C++单件模式实现代码详解
- 单件的 static 实现
- C#的单件实现
- 单件模式的经典代码
- 单件模式——JAVA的两种实现
- PHP实现单件模式的几种方式
- 单件模式的几种实现方法
- Singleton(单件)模式的两种实现方法
- PHP实现单件模式的几种方式
- 再探C++的单件实现
- 单件模式的C++标准实现
- 单件模式的C++模板实现
- 游戏里的单件模式实现
- 单件模式的C++标准实现
- C++单件模式的实现
- 引用类型实现的单件模式
- singleton 单件模式的实现
- 四则运算,简单算术题(如:1*2+3/3*4+8)
- 三十句瞬间使你清醒的话
- 判断字符串中有多少汉字
- OGNL
- 直连网线和交叉网线的制作与应用
- 三种实现单件的代码
- 解耦合和面向对象的编程思想
- 结构体指针
- Linux下安装mysql(http://www.javaeye.com/topic/431880)
- JSTL
- 用脚本更换墙纸
- 一个浙江富商总结出的23条经典的经商+做人法则!!
- SQL数据库还原语句
- java中全角转换为半角的方法