C++学习—单例模式

目录

​编辑

一,单例模式介绍

二,单例模式下的两种模式

1,饿汉模式

2,懒汉模式


一,单例模式介绍

单例:在全局只有一份实例。

单例模式是编程的经典模式之一。

二,单例模式下的两种模式

1,饿汉模式

饿汉模式:在main函数启动前就先把实例化的类对象准备好。

1,提前准备好实例化对象:要使用全局变量。

2,保证全局只有一个实例化对象:要将构造函数,拷贝构造函数,赋值重载函数私有化防止类外面访问。

3,一个对象要是全局的又要能访问类里面的私有化方法:要在类里面声明一个static对象,在类外面定义。

代码示例:

cpp 复制代码
class Singleton
{

public:

	static Singleton*Get()//定义一个函数来调用这个对象。
	{
		return &member;
	}

	void change(int x)//改变成员_a值的函数
	{
		member._a = x;
	}

	int val()//返回一个成员_a值
	{
		return member._a;
	}


private:

	//构造函数私有化,赋值重载禁用
	Singleton() {};
	Singleton(const Singleton& aa)=delete;
	Singleton& operator=(Singleton) = delete;

	int _a = 0;
	static Singleton member;//在类里面声明一个static成员。
};

Singleton Singleton::member;//类外定义

以上的饿汉模式的代码示例,现在来讲一讲饿汉模式的优缺点:

优点:1,设计简单。

缺点:1,会导致程序启动慢 2,当单例模式的类实例有顺序时,顺序不可控

2,懒汉模式

懒汉模式:第一次使用时再创建。并且要解决饿汉模式的缺点。

1,提前准备好实例化对象:要使用全局变量。但是又要改掉饿汉模式下的启动慢的问题,所以要将饿汉模式下的全局对象改成一个全局指针。

2,保证全局只有一个实例化对象:要将构造函数,拷贝构造函数,赋值重载函数私有化防止类外面访问。

3,一个对象要是全局的又要能访问类里面的私有化方法:要在类里面声明一个static指针,在类外面定义。

示例代码:

cpp 复制代码
class Singleton2
{

public:

	static Singleton2* Get()//定义一个函数来调用这个对象
	{
		if (member2 == nullptr) return member2 = new Singleton2;//第一次使用时创建
		else return member2;
	}

	void change(int x)//改变成员_a值的函数
	{
		member2->_a = x;
	}

	int val()//返回一个成员_a值
	{
		return member2->_a;
	}


private:

	//构造函数私有化,赋值重载禁用
	Singleton2() {};
	Singleton2(const Singleton& aa) = delete;
	Singleton2& operator=(Singleton) = delete;

	int _a = 0;
	static Singleton2* member2 ;//在类里面声明一个static成员。
};

Singleton2* Singleton2::member2 = nullptr;//类外定义初始化为nullptr

以上便是懒汉模式的示例代码。懒汉模式的优缺点如下:

优点:

1,解决了饿汉模式的缺点。

缺点:

1,具有线程安全的问题。(这个我还不太懂,以后补充)。

相关推荐
讳疾忌医丶6 小时前
深度拆解 RocksDB 内核:基于 C++17 的 FIFO 调度状态机与温度阶梯自愈设计
java·c++·算法·架构
M78佐菲6 小时前
51单片机学习笔记:ds18b20要点整理
linux·笔记·嵌入式硬件·学习·51单片机
2401_868534786 小时前
OpenStack 架构全景:八个核心组件深度拆解
c++·需求分析
高亦真6 小时前
今天是学习嵌入式的第37天
linux·学习·算法
软件课代表CiCi6 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
蒸蒸yyyyzwd8 小时前
从面经中学到的三件事
c++·笔记
时时三省8 小时前
【时时三省】计算机c语言二级考试选择题重点
c++
泡泡鱼(敲代码中)9 小时前
Python 字符串 str 完整学习笔记
python·学习
ThornArmor10 小时前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机
kyrie_sakura11 小时前
python学习笔记15 -- Anaconda,Jupyter,numpy
python·学习·jupyter·numpy