C++设计模式之单例模式

C++设计模式之单例模式

应用场景:如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

懒汉单例模式

Singleton.h

/*说明:
*1.保证一个类仅可以有一个实例化对象,并且提供一个可以访问它的全局接口
*2.为了避免在其他函数 实例化 需要将构造函数私有化
*3.由于无法实例化需要通过类名静态调用。使用关键词static修饰创建对象接口getInstance;
*懒汉式单例模式*/
#pragma once
class Singleton
{
public:
	static Singleton* getInstance();//静态方法属于类,所以只能调用静态属性
	void doWork();
private:
	Singleton();
private:
	static Singleton* m_singleton;
};

Singleton.cpp

#include "Singleton.h"
#include <iostream>
#include <mutex>
using namespace std;
Singleton* Singleton::m_singleton = nullptr;//类外初始化
std::mutex mux;
Singleton* Singleton::getInstance()
{
	if (m_singleton == nullptr)
	{
		mux.lock();//防止懒汉单例模式多线程同时访问产生竞争
		m_singleton= new Singleton;//这个时候会调用私有构造,
		mux.unlock();
	}
	return m_singleton;
}

Singleton::Singleton()
{
	cout << "私有构造完成类内初始化" << endl;;
}

饥饿单例模式

Singleton.h

/*说明:
*1.适用工程只需要一个对象,在同一个对象进行操作
*2.为了避免在其他函数 实例化 需要将构造函数私有化
*3.由于无法实例化需要通过类名静态调用。使用关键词static修饰创建对象接口getInstance;
*懒汉式单例模式*/
#pragma once
class Singleton
{
public:
	static Singleton* getInstance();//静态方法属于类,所以只能调用静态属性
private:
	Singleton();
private:
	static Singleton* m_singleton;
};

Singleton.cpp

#include "Singleton.h"
#include <iostream>
using namespace std;
Singleton* Singleton::m_singleton = new Singleton;//类外初始化
Singleton* Singleton::getInstance()
{
	return m_singleton;
}

Singleton::Singleton()
{
	cout << "私有构造完成类内初始化" << endl;;
}

main.cpp

#include <iostream>
#include "Singleton.h"
int main()
{
	Singleton::getInstance()->doWork();//无需new对象即可对类内public成员方法进行访问
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值