讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

AniShort
AniShort

AI短剧协同制作平台

updream

一键生成高质量推广成片

剧云
剧云

中文短剧剧本制作平台

C++单例模式实现_C++ Singleton设计模式示例

冬杰大大_2638

冬杰大大_2638

发布时间:2026-01-21 12:59:07

|

167人浏览过

|

来源于php中文网

原创

单例模式确保类唯一实例并提供全局访问点。1. 懒汉模式延迟创建但线程不安全;2. 双重检查锁定加互斥锁实现线程安全懒加载;3. 饿汉模式程序启动即创建,线程安全但影响启动性能;4. 局部静态变量利用C++11特性,线程安全且简洁推荐。

c++单例模式实现_c++ singleton设计模式示例

单例模式(Singleton Pattern)是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。在C++中,实现单例模式需要考虑线程安全、构造函数私有化、禁止拷贝等细节。下面介绍几种常见的C++单例模式实现方式。

1. 懒汉模式(懒加载,线程不安全)

这种实现方式在第一次调用时才创建实例,但未考虑多线程环境下的竞争问题:

class Singleton {
private:
    static Singleton* instance;
    Singleton() = default;  // 私有构造函数
    Singleton(const Singleton&) = delete;            // 禁止拷贝
    Singleton& operator=(const Singleton&) = delete; // 禁止赋值
<p>public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};</p><p>// 静态成员定义
Singleton* Singleton::instance = nullptr;</p>

这种方式在多线程环境下可能创建多个实例,不适合并发场景。

2. 懒汉模式 + 双重检查锁定(线程安全)

使用互斥锁和双重检查机制,保证线程安全且只创建一次实例:

立即学习“C++免费学习笔记(深入)”;

#include <mutex>
<p>class Singleton {
private:
static Singleton* instance;
static std::mutex mtx;
Singleton() = default;
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;</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><p>Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;</p>

这种写法避免了每次调用都加锁的性能损耗,适合多线程环境。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载

3. 饿汉模式(线程安全)

在程序启动时就创建实例,天然线程安全,因为没有延迟初始化的竞争问题:

class Singleton {
private:
    static Singleton instance;
    Singleton() = default;
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;
<p>public:
static Singleton& getInstance() {
return instance;
}
};</p><p>// 全局静态初始化
Singleton Singleton::instance;</p>

优点是简单且线程安全,缺点是即使未使用也会被创建,可能影响启动性能。

4. 局部静态变量(推荐,C++11起线程安全)

C++11标准规定局部静态变量的初始化是线程安全的,这是最简洁且安全的实现:

class Singleton {
private:
    Singleton() = default;
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;
<p>public:
static Singleton& getInstance() {
static Singleton instance; // 局部静态变量,首次调用时初始化
return instance;
}
};</p>

该方式自动管理生命周期,无需手动释放,代码简洁,推荐在现代C++中使用。

基本上就这些常见实现方式。选择哪种取决于你的需求:是否需要懒加载、是否多线程、是否追求简洁。对于大多数情况,局部静态变量方式是最优解。

热门AI工具

更多
SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

4878

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

1369

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

463

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

599

2026.01.21

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

449

2026.02.06

C++多线程并发控制与线程安全设计实践
C++多线程并发控制与线程安全设计实践

本专题围绕 C++ 在高性能系统开发中的并发控制技术展开,系统讲解多线程编程模型与线程安全设计方法。内容包括互斥锁、读写锁、条件变量、原子操作以及线程池实现机制,同时结合实际案例分析并发竞争、死锁避免与性能优化策略。通过实践讲解,帮助开发者掌握构建稳定高效并发系统的关键技术。

273

2026.03.16

Java 多线程与并发编程实战
Java 多线程与并发编程实战

深入讲解 Java 并发编程体系,涵盖 Thread / Runnable / Callable 线程创建方式、线程生命周期与状态转换、synchronized 同步锁与 Lock/ReentrantLock 显式锁、volatile 可见性保证、ThreadPool 线程池配置与调优(核心参数/拒绝策略)、JUC 并发工具类(CountDownLatch/CyclicBarrier/Semaphore/ConcurrentHashMa

409

2026.04.17

C++ 多线程使用教程大全
C++ 多线程使用教程大全

系统讲解 C++11 及后续标准引入的多线程编程能力,涵盖 std::thread 线程创建与生命周期管理、std::mutex / shared_mutex 互斥锁与读写锁、std::condition_variable 条件变量同步、std::atomic 原子操作与内存序(memory_order)、std::future / promise / async 异步任务、线程池的设计与实现、死锁检测与避免策略,帮助开发者编写正确高效

256

2026.04.28

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

40

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
前端开发(基础+实战项目合集)
前端开发(基础+实战项目合集)

共60课时 | 6.6万人学习

第十九期_前端开发
第十九期_前端开发

共111课时 | 19.4万人学习

第十七期_前端开发
第十七期_前端开发

共60课时 | 10.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn