单例 Singleton 是设计模式的一种,特点是只提供唯一一个类的实例,具有全局变量的特点,在任何位置都可以通过接口获取到那个唯一实例;
具体运用场景如:
设备管理器,系统中可能有多个设备,但是只有一个设备管理器,用于管理设备驱动;
数据池,用来缓存数据的数据结构,需要在一处写,多处读取或者多处写,多处读取;
C++单例的实现
全局只有一个实例:static 特性,同时禁止用户自己声明并定义实例(把构造函数设为 private)
线程安全
禁止赋值和拷贝
用户通过接口获取实例:使用 static 类成员函数
举例:
class Printer
{
int count;
static Printer* pprint; //唯一实例
Printer(void) //把构造函数设为 private
{
count = 0;
}
Printer(const Printer&) {} //把构造函数设为 private
public:
static Printer* getSinglePrint(void) //接口(如果不设置为静态,无法通过类直接调用)
{
return pprint;
}
void Toprint(char* str)
{
cout << "输出:" << str << endl;
count++;
cout << "---" << count << endl;
}
};
Printer* Printer::pprint = new Printer;
int main()
{
Printer* p = Printer::getSinglePrint();
p->Toprint((char*)"打印机");
return 0;
}