Instance静态成员函数提供类操作的全局访问点。静态成员变量_instance用于保存一个指向它的唯一实例的指针。
Singleton类定义如下:
class Singleton
{
public:
static Singleton * Instance ();
protected:
Singleton();
private:
static Singleton * _instance;
};
实现如下:
Singleton * Singleton :: _instance = 0;
Singleton * Singleton :: Instance()
{
if (_instance == 0)
{
_instance = new Singleton ();
}
return _instance;
}
客户仅通过Singleton::Instance函数访问这个单件。变量_instance初始化为0,而静态成员函数Instance返回该变量值,如果其值为0,则用唯一实例初始化它。Instance使用惰性(Lazy)初始化;它的返回值直到第一次访问时才被创建和保存。另为,注意Singleton类的构造函数是保护型的(protected),试图直接实例化Singleton类的客户将得到一个编译时的错误信息。这就保证了仅有一个实例可以被创建。