Singleton模式用于创建一个唯一的对象,既然是唯一的,那么肯定就不支持拷贝构造和赋值操作符,同时,也不能创建其他的对象,所以不能将构造函数放到public中而让用户任意的构造对象。Singleton模式为这样的需求提供的解决方案。
直接上一个例子吧!
#include <iostream>
using namespace std;
class Singleton {
public:
static Singleton* create(int x = 0);
void print() { cout << i << endl; }
protected:
Singleton(int x = 0): i(x) {};
private:
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
static Singleton * _singleton;
int i;
};
Singleton* Singleton::_singleton = NULL;
Singleton* Singleton::create(int x)
{
if(!_singleton)
_singleton = new Singleton(x);
return _singleton;
}
int main()
{
Singleton* s = Singleton::create(5);
s->print();
delete s;
return 0;
}
Singleton类通过static成员_singleton,使得所有对象共享一个指针,同时static成员函数create确保只创建一个这样的对象。