单例模式保证一个类的实例只有一个。如何保证一个类只有一个实例,不同的语言语法特性不同,需要结合语言的语法特点来实现。在 C++中的实现方式如下:
#include <iostream> using namespace std; class Singleton { private: Singleton() {} Singleton(const Singleton& singleton) {} public: static Singleton* get_instance() { return p_instance; } private: static Singleton* p_instance; }; Singleton *Singleton::p_instance = new Singleton; int main() { Singleton* singleton = Singleton::get_instance(); cout << singleton return 0; }
上面类通过:
- 普通构造、拷贝构造私有,从而禁止对象被创建;
- 提供静态成员变量、静态成员函数来访问唯一对象;
- 类内的静态成员要在类外初始化。
如果单例类需要被继承的话,将普通构造、拷贝构造函数的访问权限修改为 protected 即可。另外,上面代码仅仅是为了保证不会被实例化出更多的对象,我们在实际使用时,仍然需要在类内增加其他的业务代码。