以下结构,均来自我们的服务器框架结构中所展现的奇淫技巧,博大颈深,值得我这只菜鸟,好好研究一番。
单列基本雏形,目的就是只能产生一个对象,以下完整实现
#include<iostream>
using namespace std;
class Singleton
{
private:
Singleton();//注意:构造方法私有
virtual ~Singleton();
static Singleton* instance;//惟一实例
int var;//成员变量(用于测试)
public:
static Singleton* GetInstance();//工厂方法(用来获得实例)
int getVar();//获得var的值
void setVar(int);//设置var的值
};
//构造方法实现
Singleton::Singleton()
{
this->var = 20;
cout<<"Singleton Constructor"<<endl;
}
Singleton::~Singleton()
{
delete instance;
}
//初始化静态成员
Singleton* Singleton::instance=NULL;
Singleton* Singleton::GetInstance()
{
if(instance==NULL)
{
instance=new Singleton();
}
return instance;
}
//seter && getter含数
int Singleton::getVar()
{
return this->var;
}
void Singleton::setVar(int var)
{
this->var = var;
}
//main
int main(int argc, char* argv[])
{
Singleton *ton1 = Singleton::GetInstance();
Singleton *ton2 = Singleton::GetInstance();
cout<<"ton1 var = "<<ton1->getVar()<<endl;
ton1->setVar(150);
cout<<"ton2 var = "<<ton2->getVar()<<endl;
//Singleton *ton3();
//cout<<ton3->getVar()<<endl;
//如果有上句话,出出现
error C2227: left of '->getVar' must point to class/struct/union,这样懂了吧。
return 0;
}
如果大型游戏服务器中,就需要智能指针来进行统一管理,自动析构对象,也就是为什么需要使用智能指针,参考CSDN博客
http://blog.csdn.net/skiing_886/article/details/7937907
如果大型游戏服务器中,就需要智能指针来进行统一管理,自动析构对象,也就是为什么需要使用智能指针,参考CSDN博客
http://blog.csdn.net/skiing_886/article/details/7937907
#include<iostream>
using namespace std;
template<typename T>
class CVAutoPtr
{
public:
CVAutoPtr() : m_auto_ptr(0) {}
CVAutoPtr(T* ptr) : m_auto_ptr(ptr) {}
CVAutoPtr(const CVAutoPtr& obj) : m_auto_ptr(obj.get()) {}
~CVAutoPtr() { reset (0); }
CVAutoPtr& operator= (const CVAutoPtr& obj)
{
this->m_auto_ptr = obj.get();
return *this;
}
T* get() const { return m_auto_ptr; }
T* operator() () { return get(); }
void reset(T* ptr)
{
if (m_auto_ptr == ptr)
{
return;
}
if (m_auto_ptr)
{
delete m_auto_ptr;
}
m_auto_ptr = ptr;
}
private:
T* m_auto_ptr;
};
template<typename T, int X = 0> class CVSingleton
{
private:
CVSingleton() {}
CVSingleton(const CVSingleton&) {}
~CVSingleton() {}
CVSingleton& operator= (const CVSingleton &) { return *this; }
public:
static T* Instance()
{
static CVAutoPtr<T> autoptr;
if(autoptr.get() == 0)
{
autoptr.reset(new T);
}
return autoptr.get();
}
};
class CPlayerInfoMaster
{
public:
void Init()
{
cout<<"单列模式+智能指针,这就好比java垃圾回收器一样"<<endl;
}
};
#define PLAYER_INFO_MASTER (CVSingleton<CPlayerInfoMaster>::Instance())
int main()
{
PLAYER_INFO_MASTER->Init();
return 0;
}
操,中午了,先去吃饭。
操,中午了,先去吃饭。