/*****************************************
单件的实现一般有两种方法.一是在Instance函数中使用静态对象.
二是在单件类中放一个静态指针.在第一次调用Instance函数时去初始化.
这两种方法都各有好处和坏处. 如使用静态对象可以使代码看上去非常的
优美,对象的构造和析构也是自然完成的,但是由于c++中的静态对象是在
栈上分配内存的,所以对于>1M的对象可能会有些问题.而对于用指针的实现
方法坏处就很明显,我们不知道应该在哪个地方去删除他!
通过以下的封装,可以简单的使用单件.同时消除了以上两种方法的坏处.
使用是先将SINGLETON(YourClassName)内嵌到你的类中. 调用时只要使用
INSTANCE(CLASS)就可以了.如:
class A{
SINGLETON(A); A(){};
public:
Test(){};
};
....
INSTANCE(A)->Test();
......
*****************************************/
/*
** Author: 邓超
** QQ: 23427470
** Time:
** version: 1.1
** Fantasy Game Engine 1.0
** Copyright (C) 2005-2007, Fantasy Games
** Kernel functions
*/
#pragma once
namespace fge
{
//单件模板,通过对单件的模板和函数式宏封装,统一了单件的调用方式,减少了代码和编码时间.
template <typename T>
class CSingleton
{
private:
CSingleton( )
{
m_instance = new T();
}
~CSingleton()
{
if(m_instance)
delete m_instance;
m_instance = 0;
}
public:
inline static T* Instance()
{
static CSingleton i;
return m_instance;
}
static T* m_instance;
};
template<typename T>
T* CSingleton<T>::m_instance = 0;
#define INSTANCE(CLASS) fge::CSingleton<CLASS>::Instance()
#define SINGLETON(CLASS) friend CSingleton<CLASS>
}
发表于 @ 2009年03月19日 17:34:00 | 评论( loading... ) | 举报| 收藏