3 CLuaScriptMgr单例设计
来源:互联网 发布:网络配线架怎么打 编辑:程序博客网 时间:2024/04/30 07:04
首先定义一个模板类 Singleton
在Singleton.h中
#define DEFINE_SINGLETON2(class_name); \public: \friend class Singleton<class_name>;\private: \class_name(const class_name&){} \class_name& operator=(const class_name&);template< typename T > class Singleton{ protected:Singleton() {}virtual ~Singleton() {}Singleton(const Singleton< T >&) {}Singleton< T >& operator = (const Singleton< T >&){}class CGarbo //它的唯一工作就是在析构函数中删除CSingleton的实例{public:~CGarbo(){if(Singleton< T >::m_pInstance )delete Singleton< T >::m_pInstance;}};public:static T& GetSingleton(){static T _singleton;//if (m_pInstance == NULL) //m_pInstance = new T(); return _singleton;} };
然后我们来实现自己的CLuaScriptMgr类
class CLuaScriptMgr : public Singleton<CLuaScriptMgr>{/*模板类Singleton为CLuaScriptMgr的友元类,所以Singleton可以调用CLuaScriptMgr的私有方法*/DEFINE_SINGLETON2(CLuaScriptMgr)private:CLuaScriptMgr();~CLuaScriptMgr();。。。};
因为CLuaScriptMgr的构造函数,拷贝构造函数,赋值函数都被定义为 私有的。所以外部是没办法创建CLuaScriptMgr 对象的, 这里把Singleton声明为CLuaScriptMgr的友元,只有在Singleton 可以访问CLuaScriptMgr的所有方法。
在main.cpp中使用的话,直接声明一个宏
#define g_LuaSingleton CLuaScriptMgr::GetSingleton()
调用的时候:
g_LuaSingleton.LoadScript("../../test/HelloWorld.lua");
这样一个单例对象CLuaScriptMgr 就已经完成了。
- 3 CLuaScriptMgr单例设计
- 设计模式3 - 单例模式Singleton
- 设计模式系列3-单例模式
- java设计模式(3)---单例模式
- (3/23)单例设计模式
- 设计模式(3): 单例模式
- <设计模式3>单例模式
- 设计模式--[3]单例模式
- 设计模式(3)-单例模式
- 设计模式3-单例模式
- 设计模式--单例
- 单例设计模式
- 设计模式----单例
- 单例设计
- 单例设计模式
- 单例设计模式
- 单例设计模式
- 单例设计模式
- List与Set的区别
- dede “上一篇”、“下一篇”链接的获取
- 安装 SQL SERVER MsiGetProductInfo 无法检索 Product Code 解决方案
- 【转】ubuntu的root密码
- 黑马程序员__ 基本数据类型的自动拆箱和装箱
- 3 CLuaScriptMgr单例设计
- Linux 的 initrd (linuxrc,init)
- 【转】linux命令大全
- 然ubuntu VIM打造成IDE阅读代码
- 工作三年总结和未来计划
- PHP中文乱码解决办法
- partition X does not end on cylinder boundary
- java框架
- XML文件解析&操作&与JSON比较