所谓单例模式,就是只允许全局有一个此类生成的对象。在C++中有几种实现,下面一一列举。
1. 最初模式
class Singleton {
public:
static Singleton * GetInstance() {
if(m_pInstance==NULL)
m_pInstance=new Singleton();
return m_pInstance;
}
private:
static Singleton *m_pInstance;
Singleton();
Singleton & operator=(Singleton& s);
Singleton(Singleton& s);
}
需要解释的几点:
- 必须把构造函数、赋值运算、拷贝构造函数设为私有,这是防止单例在外部被复制;
- 使用static成员,保证全局只有一份。
有些朋友说这里单例需要被释放的问题。其实这是个伪问题,不存在,单例一旦被创建就会活到整个程序结束。当程序结束时,程序占用的堆(单例被new的地方)也会应被操作系统自动释放,程序结束后,不会遗留任何问题,所以不必担心空间的释放问题。
2. 局部静态变量实现
可以使用局部的静态变量来实现,看代码干净整洁了许多。
class Singleton {
public:
static Singleton & GetInstance() {
static Singleton obj
return obj;
}
private:
Singleton();
Singleton & operator=(Singleton& s);
Singleton(const Singleton& s);
}
网友评论