C++实现单例模式

单例模式:
某个类只能生成一个实例,该类提供了一个全局访问点提供给外部获取该实例,目的是节约内存资源,保证数据内容一致性,堆某些类要求只能创建一个实例。

实现方式:
普通类的构造函数是公有的(public),外部类可以通过**new 构造函数()**来生成多个实例。但是,假设把类的构造函数设为私有的(private),外部类就不能调用该构造函数,也就不能生成多个实例。因此该类自身必须定义一个静态私有实例,且向外提供一个静态的公有函数(public)用于创建或者获取该静态私有实例。

函数代码
第一步:类函数定义

#pragma once
#include <iostream> 
#include <mutex> 
using namespace std;
std::mutex mt;

class President
{
	private:
		//静态创建私有实例,避免类在外部实例化 
		static President *instance;
		President(){} 
	
	public:
		//在方法上加上同步 
		static President *getInstance();
		void getname(); 	
};

第二步:类函数实现

//在此处初始化
President *President::instance=new President();
President();
President *President::getinstance() 
{
	mt.lock();
	if(instance==NULL)
	{
		instance=new President();
	} 
	
	else
	{
		cout<<"已经有一个总体,不能产生新的总统!"<<endl;
	}
	mt.unlock();
	return instance;
}

void President::getName()
{
	cout<<"我是美国总统!"<<endl; 
}

第三步:主函数实现

int main()
{
	President *p1=President::getInstance();
	//p1->getInstance(); 
	p1->getName();
	President *p2=President::getInstance();
	//p2->getInstance();
	p2->getname();
	
	if(p1==p2)
	{
		cout<<"他们是同一个人"<<endl; 
	}
	else
	{
		cout<<"他们不是同一个人"<<endl;
	}
}

总结:
**单例模式是指程序只提供唯一一个类的实例,具有全局变量的特点,在任何位置都可以通过接口获取到那个唯一实例。**例如:
1.设备管理器,系统中可能有多个设备管理器,用于管理设备驱动。
2.数据池,用来缓存数据的数据结构,需要在一处写,多处读取或者多处写,多处读取。
3.一台电脑的两台打印机不能同时打印同一个文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值