#include <assert.h>
namespace TT
{
template <typename T>
class Singleton
{
private:// 構造析構私有化
Singleton() {
assert(!mp_Singleton);
mp_Singleton = static_cast<T*>(this);
}
~Singleton() {
assert(mp_Singleton);
mp_Singleton = nullptr;
}
public://公開的接口
static T& Instance() {
if (!mp_Singleton)
mp_Singleton = new T();
return (*mp_Singleton);
}
protected:
static T* mp_Singleton;// 對象
};
template <typename T> T* Singleton<T>::mp_Singleton = nullptr;
}
運用實例
#include<iostream>
#include "singleton.h"
class MyClass
{
public:
MyClass() {};
~MyClass() {};
void prin() {
std::cout << "OK" << std::endl;
}
private:
};
#define mClass TT::Singleton<MyClass>::Instance()
int main(int argc, char * args[]) {
mClass.prin();
std::cin.get();
return 0;
}
static_cast 轉換 :用隱式和用戶定義轉換的組合在類型間轉換。