3 CLuaScriptMgr单例设计

首先定义一个模板类 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 就已经完成了。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值