model
implement
singleton
class Singleton
{
public:
static Singleton* Instance();
//optional
public:
static void release();
protected:
Singleton();
private:
static Singleton* _instance;
};
Singleton* Singleton::_instance = NULL;
Singleton::Singleton()
{
}
Singleton* Singleton::Instance()
{
if(_instance == NULL)
{
_instance = new Singleton();
}
return _instance;
}
void Singleton::release()
{
if(_instance)
{
delete _instance;
_instance = NULL;
}
}
应用
void singleton_test()
{
Singleton* singleton = Singleton::Instance();
Singleton::release();
}
总结
- 构造函数访问权限不能为public
- release接口optional实现,一般来说,一旦生成singleton,在程序生命期内一直存在,不需要释放,程序结束,让系统负责释放,而release接口增强singleton灵活性,让singleton可以在程序运行期release,特别是在singleton很大很占内存时,在不需要singleton时release,节省内存
- _instance为private static成员指针对象,也可是Instance接口中static局部指针对象,但如果选择使用Instance接口中static局部指针对象,就无法支持release接口,也就无法在程序运行期release singleton,只能程序结束,让系统负责释放singleton