单例模式确保类唯一实例并提供全局访问点,C++中常用局部静态变量实现(饿汉模式),线程安全且简洁;推荐禁用拷贝与赋值,优先使用C++11后局部静态初始化特性,避免内存泄漏与并发问题。
单例模式确保一个类只有一个实例,并提供一个全局访问点。在 C++ 中实现单例模式时,关键在于控制构造函数的访问、定义静态实例和提供静态获取方法。以下是几种常见的 C++ 单例实现方式,适用于不同场景。
懒汉模式在第一次调用时创建实例,适合启动较慢但不一定使用的场景。
class Singleton {
private:
static Singleton* instance;
Singleton() = default; // 私有构造函数
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
// 静态成员初始化
Singleton* Singleton::instance = nullptr;
这种方式简单,但在多线程环境下可能创建多个实例,不推荐用于并发程序。
利用 std::call_once 和 std::once_flag 确保只初始化一次,是推荐的线程安全做法。
#includeclass Singleton { private: static std::once_flag onceFlag; static Singleton instance; Singleton() = default; public: static Singleton getInstance() { std::call_once(onceFlag, []() { instance = new Singleton(); }); return instance; } };
// 静态变量定义 std::once_flag Singleton::onceFlag; Singleton* Singleton::instance = nullptr;
该方式保证多线程下也只创建一次实例,代码清晰且安全。
在程序启动时就创建实例,天然线程安全,因为没有竞态条件。
class Singleton {
private:
Singleton() = default;
public:
static Singleton& getInstance() {
static Singleton instance; // 局部静态变量,C++11 起线程安全
return instance;
}
};
这是最简洁、最常用的实现方式。局部静态变量在首次访问时初始化,之后直接返回,且 C++11 标准保证其初始化是线程安全的。
为避免手动管理内存,可以加入内部嵌套类或智能指针来自动释放资源。
class Singleton {
private:
Singleton() = default;
struct Deleter {
~Deleter() {
if (Singleton::instance !=
nullptr) {
delete Singleton::instance;
Singleton::instance = nullptr;
}
}
};
static Deleter deleter;
public:
static Singleton* getInstance() {
static Singleton inst;
instance = &inst;
return instance;
}
static Singleton* instance;
};
Singleton* Singleton::instance = nullptr;
Singleton::Deleter deleter;
通过析构器自动清理,避免内存泄漏。不过更现代的做法是直接使用局部静态对象,由 C++ 运行时管理生命周期。
基本上就这些常见写法。推荐优先使用局部静态变量版本的饿汉模式,简洁、线程安全、无需手动释放。不复杂但容易忽略细节,比如构造函数私有、拷贝控制等。记得禁用拷贝和赋值:
Singleton(const Singleton&) = delete; Singleton& operator=(const Singleton&) = delete;
# c++
# 构造函数
# 指针
# 线程
# 多线程
# 并发
# 对象
# 这是
# 首次
# 多个
# 但在
# 适用于
# 几种
# 只有一个
# 时就
# 提供一个
相关文章:
高防服务器:AI智能防御DDoS攻击与数据安全保障
如何做网站制作流程,*游戏网站怎么搭建?
建站之星如何配置系统实现高效建站?
网站制作话术技巧,网站推广做的好怎么话术?
建站主机解析:虚拟主机配置与服务器选择指南
制作营销网站公司,淘特是干什么用的?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
深圳网站制作案例,网页的相关名词有哪些?
如何快速搭建自助建站会员专属系统?
建站之星收费标准详解:套餐费用及年费价格表一览
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
深圳网站制作培训,深圳哪些招聘网站比较好?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
建站之星下载版如何获取与安装?
如何在宝塔面板中创建新站点?
如何快速搭建支持数据库操作的智能建站平台?
C++时间戳转换成日期时间的步骤和示例代码
如何通过虚拟主机空间快速建站?
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何正确下载安装西数主机建站助手?
名字制作网站免费,所有小说网站的名字?
如何在建站之星绑定自定义域名?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
如何高效配置香港服务器实现快速建站?
如何自定义建站之星网站的导航菜单样式?
如何快速搭建安全的FTP站点?
营销式网站制作方案,销售哪个网站招聘效果最好?
高端网站建设与定制开发一站式解决方案 中企动力
简历在线制作网站免费,免费下载个人简历的网站是哪些?
如何通过VPS建站无需域名直接访问?
建站主机空间推荐 高性价比配置与快速部署方案解析
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
移民网站制作流程,怎么看加拿大移民官网?
寿县云建站:智能SEO优化与多行业模板快速上线指南
魔毅自助建站系统:模板定制与SEO优化一键生成指南
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
建站主机选购指南与交易推荐:核心配置解析
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
兔展官网 在线制作,怎样制作微信请帖?
如何选择建站程序?包含哪些必备功能与类型?
建站之星好吗?新手能否轻松上手建站?
建站主机选择指南:服务器配置与SEO优化实战技巧
如何用好域名打造高点击率的自主建站?
Python lxml的etree和ElementTree有什么区别
临沂网站制作公司有哪些,临沂第四中学官网?
如何快速生成专业多端适配建站电话?
已有域名如何免费搭建网站?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
如何通过免费商城建站系统源码自定义网站主题与功能?
*请认真填写需求信息,我们会在24小时内与您取得联系。