class Sig
{
public:
static Sig* GetInstance()
{
static Sig s_sig;
return &s_sig;
}
protected:
Sig(){};
Sig(const Sig& obj){};
Sig& operator=(const Sig& obj);
~Sig();
};
可作继承用的模板单例基类:
template <typename T>
class Singleton
{
public:
static T& getInstance()
{
if(NULL == _instance)
{
_instance = new T;
}
return (*_instance);
}
protected:
Singleton()
{
assert(!_instance);
_instance = static_cast<T*>(this);
}
~Singleton()
{
assert(_instance);
_instance = 0;
}
Singleton(const Singleton& obj){};
Singleton& operator=(const Singleton& obj);
protected:
static T*
_instance;
};
template <typename T> T* Singleton<T>::_instance = 0;
use:
class MySigClass: public Singleton<MySigClass>
{
...
};
各位有更好的实现请指教.