单例模式 c++

一、单例是什么

全局有且只有一个类的static实例。

二、c++实现单例

2.1 一个好的单例应该具备下面4点

  • 全局只有一个实例:static特性,同时禁止用户自己声明并定义实例(把构造函数设为private)
  • 线程安全
  • 禁止拷贝和赋值
  • 用户通过接口获取实例:使用static类成员函数

2.2最推荐的懒汉式单例-局部静态变量

如果当变量在初始化的时候,并发同时进入声明语句,并发线程将会阻塞等待初始化结束。并发线程在获取静态变量的时候一定是初始化过的,具有线程安全性。

c++静态变量的生存期是从声明到程序结束,懒汉式。

cpp 复制代码
#include <iostream>
using namespace std;

class SingletonPattern_V3
{
public:
	~SingletonPattern_V3() {
		std::cout << "destructor called!" << std::endl;
	}
	//禁止赋值和拷贝
	SingletonPattern_V3(const SingletonPattern_V3&) = delete;
	SingletonPattern_V3& operator=(const SingletonPattern_V3&) = delete;
	//用户通过接口获取实例:使用static类成员函数
	static SingletonPattern_V3& Instance() {
		//局部静态变量特性,保证线程安全,全局只有一个实例
		static SingletonPattern_V3 m_pInstance;
		return m_pInstance;
 
	}
private:
	//禁止用户自己声明并定义实例(把构造函数设成private)
	SingletonPattern_V3() {
		std::cout << "constructor called!" << std::endl;
	}
};
 
int main()
{
	SingletonPattern_V3& instance_1 = SingletonPattern_V3::Instance();
	SingletonPattern_V3& instance_2 = SingletonPattern_V3::Instance();
 	system("pause");
	return 0;
}
相关推荐
Highcharts.js6 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
头发还在的女程序员7 小时前
医院陪诊管理系统怎么选择?——2026 年选型避坑与架构参考
java·开发语言·陪诊系统·陪诊app·医院陪诊陪护
王维同学8 小时前
Winsock 协议与名称空间 Provider 目录
网络·c++·windows·安全
拳里剑气9 小时前
C++算法:BFS解决FloodFill算法
c++·算法·bfs·宽度优先
爱写代码的小朋友9 小时前
从零开始学 Win32 API:C++ 窗口编程实战(VS Code + MinGW-w64 命令行详解)
开发语言·c++
果汁华9 小时前
Function Calling 与 Python 实战完整指南
开发语言·网络·python
小小晓.10 小时前
C++:语句和作用域
开发语言·c++
fqbqrr10 小时前
2607C++,soui,xplayer视频播放器
c++·soui
wanderist.11 小时前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
zh路西法11 小时前
【10天速通ROS2-PX4无人机】(四) 关掉GPS和气压计,纯激光定位还能飞吗
c++·无人机·px4·ros2·卡尔曼滤波·fastlio2