C++实现 单例模式实例详解
发布时间 - 2026-01-11 01:00:22 点击率:次设计模式之单例模式C++实现

一、经典实现(非线程安全)
class Singleton
{
public:
static Singleton* getInstance();
protected:
Singleton(){}
private:
static Singleton *p;
};
Singleton* Singleton::p = NULL;
Singleton* Singleton::getInstance()
{
if (NULL == p)
p = new Singleton();
return p;
}
二、懒汉模式与饿汉模式
懒汉:故名思义,不到万不得已就不会去实例化类,也就是说在第一次用到类实例的时候才会去实例化,所以上边的经典方法被归为懒汉实现;
饿汉:饿了肯定要饥不择食。所以在单例类定义的时候就进行实例化。
特点与选择
由于要进行线程同步,所以在访问量比较大,或者可能访问的线程比较多时,采用饿汉实现,可以实现更好的性能。这是以空间换时间。在访问量较小时,采用懒汉实现。这是以时间换空间。
线程安全的懒汉模式
1.加锁实现线程安全的懒汉模式
class Singleton
{
public:
static pthread_mutex_t mutex;
static Singleton* getInstance();
protected:
Singleton()
{
pthread_mutex_init(&mutex);
}
private:
static Singleton* p;
};
pthread_mutex_t Singleton::mutex;
Singleton* Singleton::p = NULL;
Singleton* Singleton::getInstance()
{
if (NULL == p)
{
pthread_mutex_lock(&mutex);
if (NULL == p)
p = new Singleton();
pthread_mutex_unlock(&mutex);
}
return p;
}
2.内部静态变量实现懒汉模式
class Singleton
{
public:
static pthread_mutex_t mutex;
static Singleton* getInstance();
protected:
Singleton()
{
pthread_mutex_init(&mutex);
}
};
pthread_mutex_t Singleton::mutex;
Singleton* Singleton::getInstance()
{
pthread_mutex_lock(&mutex);
static singleton obj;
pthread_mutex_unlock(&mutex);
return &obj;
}
饿汉模式(本身就线程安全)
class Singleton
{
public:
static Singleton* getInstance();
protected:
Singleton(){}
private:
static Singleton* p;
};
Singleton* Singleton::p = new Singleton;
Singleton* Singleton::getInstance()
{
return p;
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# C++
# 单例模式
# 单例模式详解
# C++实现单例模式的自动释放
# 详解C++实现线程安全的单例模式
# C++ 单例模式的几种实现方式研究
# 使用设计模式中的单例模式来实现C++的boost库
# C++实现单例模式的方法
# 这是
# 会去
# 饥不择食
# 就不
# 万不得已
# 希望能
# 可以实现
# 比较大
# 谢谢大家
# 饿了
# 肯定要
# 故名
# 加锁
# 也就是说
# protected
# span
# private
# return
# NULL
# br
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
iOS UIView常见属性方法小结
北京专业网站制作设计师招聘,北京白云观官方网站?
微信推文制作网站有哪些,怎么做微信推文,急?
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
高防服务器租用首荐平台,企业级优惠套餐快速部署
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
Laravel如何实现数据库事务?(DB Facade示例)
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
Laravel如何实现本地化和多语言支持?(i18n教程)
Python自动化办公教程_ExcelWordPDF批量处理案例
昵图网官方站入口 昵图网素材图库官网入口
如何获取免费开源的自助建站系统源码?
Laravel如何自定义错误页面(404, 500)?(代码示例)
iOS中将个别页面强制横屏其他页面竖屏
进行网站优化必须要坚持的四大原则
网站制作软件免费下载安装,有哪些免费下载的软件网站?
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
成都网站制作公司哪家好,四川省职工服务网是做什么用?
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
如何在自有机房高效搭建专业网站?
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
魔方云NAT建站如何实现端口转发?
php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】
如何快速搭建支持数据库操作的智能建站平台?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
在Oracle关闭情况下如何修改spfile的参数
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
C#如何调用原生C++ COM对象详解
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
如何用搬瓦工VPS快速搭建个人网站?
文字头像制作网站推荐软件,醒图能自动配文字吗?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
潮流网站制作头像软件下载,适合母子的网名有哪些?
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
网易LOFTER官网链接 老福特网页版登录地址
个人网站制作流程图片大全,个人网站如何注销?
html5audio标签播放结束怎么触发事件_onended回调方法【教程】
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
如何实现javascript表单验证_正则表达式有哪些实用技巧
Laravel如何与Docker(Sail)协同开发?(环境搭建教程)
WordPress 子目录安装中正确处理脚本路径的完整指南

