饿汉式在程序启动时创建实例,天然线程安全;2. 懒汉式在首次调用时初始化,C++11起局部静态变量实现线程安全且推荐使用;3. 旧标准可通过互斥锁和双重检查锁定实现线程安全;4. 智能指针可优化内存管理;5. 应删除拷贝构造与赋值操作以防止复制。

单例设计模式确保一个类只有一个实例,并提供全局访问点。在C++中,常见的实现方式有“饿汉式”和“懒汉式”,两者在初始化时机和线程安全性上有所不同。下面分别介绍线程安全的实现方法。
饿汉式在程序启动时就创建实例,由于静态变量在程序加载时完成初始化,因此天然线程安全。
优点是无需考虑多线程竞争;缺点是可能提前占用资源,即使从未使用该实例。
示例代码:
class Singleton {
private:
static Singleton instance; // 静态成员,在程序启动时构造
Singleton() {} // 私有构造函数
<p>public:
static Singleton& getInstance() {
return instance;
}</p><pre class="brush:php;toolbar:false;">Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
}; // 定义静态成员 Singleton Singleton::instance;
懒汉式延迟创建实例,直到第一次调用 getInstanc
e() 时才初始化。在多线程环境下,必须保证初始化过程线程安全。
立即学习“C++免费学习笔记(深入)”;
C++11 起,局部静态变量的初始化具有线程安全性,这是最简洁且推荐的方式。
QoQo
QoQo是一款专注于UX设计的AI工具,可以帮助UX设计师生成用户角色卡片、用户旅程图、用户访谈问卷等。
172
查看详情
示例代码(C++11 局部静态变量):
class Singleton {
private:
Singleton() {}
<p>public:
static Singleton& getInstance() {
static Singleton instance; // C++11 起线程安全
return instance;
}</p><pre class="brush:php;toolbar:false;">Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
};
如果不能使用 C++11 或以上版本,可使用互斥锁(mutex)实现线程安全的懒加载。
传统加锁方式(适用于旧标准):
#include <mutex>
<p>class Singleton {
private:
static Singleton* instance;
static std::mutex mtx;
Singleton() {}</p><p>public:
static Singleton* getInstance() {
if (instance == nullptr) { // 双重检查锁定减少锁开销
std::lock_guard<std::mutex> lock(mtx);
if (instance == nullptr) {
instance = new Singleton();
}
}
return instance;
}</p><pre class="brush:php;toolbar:false;">Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
};
// 静态成员定义 Singleton* Singleton::instance = nullptr; std::mutex Singleton::mtx;
为避免手动管理内存,可用智能指针结合锁机制自动释放资源。
#include <memory>
#include <mutex>
<p>class Singleton {
private:
static std::unique_ptr<Singleton> instance;
static std::mutex mtx;
Singleton() {}</p><p>public:
static Singleton* getInstance() {
std::lock_guard<std::mutex> lock(mtx);
if (!instance) {
instance = std::unique_ptr<Singleton>(new Singleton());
}
return instance.get();
}</p><pre class="brush:php;toolbar:false;">Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
};
std::unique_ptr
基本上就这些。C++中实现线程安全的单例,优先使用局部静态变量(Meyers 单例),代码简洁且高效。若需更复杂的控制或兼容旧环境,再考虑加锁方案。不复杂但容易忽略细节,比如删除拷贝构造和赋值操作。
以上就是C++如何实现单例设计模式_C++中线程安全的懒汉与饿汉式单例的详细内容,更多请关注其它相关文章!
# c++
# 懒加载
# 青娱乐seo
# 汽车网站建设优化技术
# 站内seo优化官网
# 潜江网站建设路夜市
# 德州智能网络营销推广
# 智能侠seo
# seo网站首页布局
# 体育用品的营销推广方案
# 郑州租房网站建设需要
# 盐城网站推广图片大全
# 推荐使用
# 首次
# 互斥
# 这是
# 加锁
# 启动时
# 如何使用
# 加载
# 多线程
# 如何实现
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
Linux如何优化系统启动流程_Linux启动项优化方案
实现二叉树的层序插入:基于树大小的路径导航
以下哪一项是古代兵书三十六计中的计谋
如何查找哪个composer包引入了特定的依赖?
《兴业银行》注册登录方法
win11怎么启用或禁用休眠 Win11 powercfg命令管理休眠文件【技巧】
WPS文字如何进行简繁转换
CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程
苹果如何下载nanobanana
使用Selenium在无头Chrome中交互动态菜单和复选框的策略
金牛福袋获取攻略
mysql通配符能用于日志查询吗_mysql通配符在系统日志查询中的实际使用方法
百度小说看书时如何翻页_百度小说手动翻页与自动翻页设置
顺丰快递收费标准查询_如何查看顺丰最新收费价格
windows10怎么更改下载路径_windows10默认存储位置修改教程
有道AI翻译入口 智能写作官方网站入口
大熊猫抓取竹子的“大拇指”其实是什么?蚂蚁庄园课堂今天答案最新11月30日
Lar*el Eloquent中通过Join查询关联数据表:解决多行子查询问题
123平台官方登录入口 123邮箱网页端在线沟通工具
包子漫画官网链接官方地址 包子漫画在线观看官网首页入口
广州地铁app准妈咪徽章领取方法
解决PHP MySQL数据库更新无响应:SQL查询语法错误解析
抖音怎么解除第三方绑定_抖音解除第三方平台绑定方法介绍
构建可配置的J*aScript加权点击计数器与共享总计功能
漫蛙manwa官网浏览入口_漫蛙漫画网页版访问链接
steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明
lol小红书怎么|直播|?lol小红书|直播|是什么意思?
餐馆菜篮选购指南
圆通快递官网入口查询单号 手机版官方查询入口
C#解析来自网络的XML流数据 实时错误处理与重试机制
uc浏览器官网网页版使用 uc浏览器官网免费在线首页
顺丰速运官网查询入口 顺丰物流查询官网入口链接
Lar*el怎么实现全文搜索_Lar*el Scout集成Algolia教程
msn官方入口2025登录 msn官网2025直达首页入口
Yandex俄罗斯搜索引擎官网入口 Yandex网页端直接访问
《图怪兽》退出登录方法
mysql导入sql文件能分批导入吗_mysql分批次导入大sql文件的实用技巧
windows10怎么设置电源按钮_windows10按下电源键功能修改
Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置
b站网页版入口 哔哩哔哩官方网站直接进入
《tt语音》超级玩家开通方法
研招网官方网站正版登录网址_中国研究生招生信息网官网首页
QQ网页版官方账号登录入口 QQ网页版网页版入口快速导航
在Flask应用中安全高效地更新SQLAlchemy用户数据
视频号视频怎么免费保存到相册?保存到相册需要注意什么?
《理想汽车》权限管理设置方法
composer licenses 命令:如何检查项目依赖的许可证?
解决CSS布局中意外顶部空白问题的教程
如何在CSS中使用absolute实现登录弹窗居中_transform translate结合
《荔枝fm》导出文件教程
2025-12-08
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。