#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define BT_SAFE_DELETE(p) if ((p)) {delete (p);(p) = NULL;}
/*
* 这里没有考虑多线程会new出不同对象的问题,并不是严格意义上的单例
*/
template<class T>///T类型
class singleton
{
public:
inline static T* instance();
inline static void uninstance();
protected:
static void _new_instance();
static void _delete_instance();
private:
static T* _instance;
};
template<class T>
T* singleton<T>::_instance = NULL;
template<class T>
inline T* singleton<T>::instance()
{
if (_instance == NULL)
{
_new_instance();
}
return _instance;
}
template<class T>
inline void singleton<T>::uninstance()
{
_delete_instance();
}
template<class T>
void singleton<T>::_new_instance()
{
if (_instance == NULL)
{
T* tmp = new T;
_instance = tmp;
}
}
template<class T>
void singleton<T>::_delete_instance()
{
BT_SAFE_DELETE(_instance);
}
class A:public singleton<A>
{
public:
A()
{
cout << "construct class A" << endl;
}
~A()
{
cout << "destory class A" << endl;
}
void f()
{
cout << "function f" << endl;
}
};
int main()
{
{
A::instance()->f();
A::uninstance();
}
return 0;
}