C++ 单例模式

什么是单例

单例 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
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值