什么是单例
单例 Singleton 是设计模式的一种,其特点是只提供唯一一个类的实例,具有全局变量的特点,在任何位置都可以通过接口获取到那个唯一实例;
具体运用场景如:
- 设备管理器,系统中可能有多个设备,但是只有一个设备管理器,用于管理设备驱动;
- 数据池,用来缓存数据的数据结构,需要在一处写,多处读取或者多处写,多处读取;
C++单例
要点
- 全局只有一个实例:static 特性,同时禁止用户自己声明并定义实例(把构造函数设为 private),内部维护一个对象指针并私有化唯一指针
- 禁止赋值和拷贝(把拷贝构造也进行私有化处理)
- 用户通过接口获取实例:使用 static 类成员函数
- 线程安全
代码实现
#include<iostream>
#include<string>
using namespace std;
class Printer
{
private:
//构造函数私有化
Printer() {
m_count = 0;
};
//拷贝构造函数私有化
Printer(const Printer& p) {};
//类内声明
static Printer* singlePrinter;
//方法使用次数
int m_count;
public:
static Printer* getInstance() {
return singlePrinter;
}
//写个方法
void printCont(string s) {
cout << s << endl;
m_count++;
cout << "打印机使用次数" << m_count << endl;
}
};
//类外初始化
Printer* Printer::singlePrinter = new Printer;
void test01() {
Printer* printer = Printer::getInstance();
//数组中存放带有“”号的字符串
string str[3] = { "\"内容1\"","*内容2", "内容3" };
string a;
for (int i = 0; i < 3; i++)
{
//打印三个内容
printer->printCont(str[i]);
}
}
int main() {
test01();
}
//控制台输出内容
/*
"内容1"
打印机使用次数1
*内容2
打印机使用次数2
内容3
打印机使用次数3
*/