date 2019/02/26 WJB
直接上代码吧!
//
Singleton.h
#pragma once
template <typename T> class Singleton
{
private:
Singleton(const Singleton<T> &);
Singleton& operator=(const Singleton<T> &);
protected:
static T* msSingleton;
public:
Singleton()
{
msSingleton = static_cast<T*>(this);
}
~Singleton()
{
msSingleton = 0;
}
static T& GetSingleton()
{
return (*msSingleton);
}
};
///
IndexManager.h
#pragma once
#include <windows.h>
#include "Singleton.h"
class IndexManager:public Singleton<IndexManager>
{
public:
virtual ~IndexManager();
private:
IndexManager();
public:
static IndexManager& GetSingleton();
};
IndexManager.cpp
#include "IndexManager.h"
template<> IndexManager* Singleton<IndexManager>::msSingleton = NULL;
IndexManager::IndexManager()
{
}
IndexManager::~IndexManager()
{
}
IndexManager & IndexManager::GetSingleton()
{
if (msSingleton==NULL)
{
msSingleton = new IndexManager;
}
return (*msSingleton);
}
main.cpp
int main()
{
IndexManager &a = IndexManager::GetSingleton();
printf("&a:%u\n", a);
IndexManager &b = IndexManager::GetSingleton();
printf("@b:%u\n", b);
IndexManager &c = IndexManager::GetSingleton();
printf("@b:%u\n", c);
getchar();
return 0;
}
/
输出结果:
源码下载:https://download.csdn.net/download/wangjianbo09/10977147