系统退出时需要显式调用 Release() ,释放资源。
#include "stdafx.h"
template<class T>
class Singleton
{
public:
static T* Get()
{
if (mSelf == 0)
new T();
return mSelf;
}
static void Release()
{
if (mSelf != 0)
{
delete mSelf;
mSelf = 0;
}
}
Singleton()
{
mSelf = static_cast<T*>(this);
}
~Singleton()
{
mSelf = 0;
}
protected:
static T* mSelf;
};
template<class T> T* Singleton<T>::mSelf = 0;
class CPerson : public Singleton<CPerson>
{
public:
int age = 0;
};
int main()
{
CPerson::Get()->age = 19;
CPerson::Get()->age = 21;
char s[100];
sprintf_s(s, "hello, i'm %d\n", CPerson::Get()->age);
printf(s);
CPerson::Release();
return 0;
}