转载  c++单件模式 收藏

 

/*****************************************
     单件的实现一般有两种方法.一是在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... ) | 编辑| 举报| 收藏

旧一篇: C++实现单件的初探  | 新一篇:小型对象分配器之内存块

  • 发表评论
  • 评论内容:
  •  
Copyright © firebird321
Powered by CSDN Blog