0

0

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

裘德小鎮的故事

裘德小鎮的故事

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

|

147人浏览过

|

来源于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; // 禁止赋值

public: static Singleton* getInstance() { if (instance == nullptr) { instance = new Singleton(); } return instance; } };

// 静态成员定义 Singleton* Singleton::instance = nullptr;

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

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

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

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

#include 

class Singleton { private: static Singleton* instance; static std::mutex mtx; Singleton() = default; Singleton(const Singleton&) = delete; Singleton& operator=(const Singleton&) = delete;

public: static Singleton* getInstance() { if (instance == nullptr) { std::lock_guard lock(mtx); if (instance == nullptr) { instance = new Singleton(); } } return instance; } };

Singleton* Singleton::instance = nullptr; std::mutex Singleton::mtx;

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

Shoping购物网源码
Shoping购物网源码

该系统采用多层模式开发,这个网站主要展示女装的经营,更易于网站的扩展和后期的维护,同时也根据常用的SQL注入手段做出相应的防御以提高网站的安全性,本网站实现了购物车,产品订单管理,产品展示,等等,后台实现了动态权限的管理,客户管理,订单管理以及商品管理等等,前台页面设计精致,后台便于操作等。实现了无限子类的添加,实现了动态权限的管理,支持一下一个人做的辛苦

下载

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

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

class Singleton {
private:
    static Singleton instance;
    Singleton() = default;
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

public: static Singleton& getInstance() { return instance; } };

// 全局静态初始化 Singleton Singleton::instance;

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

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

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

class Singleton {
private:
    Singleton() = default;
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

public: static Singleton& getInstance() { static Singleton instance; // 局部静态变量,首次调用时初始化 return instance; } };

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

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

相关专题

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

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

482

2023.08.10

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

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

143

2025.12.24

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

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

1

2026.01.21

云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

20

2026.01.20

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

28

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

149

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

120

2026.01.19

java输出数组相关教程
java输出数组相关教程

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

41

2026.01.19

java接口相关教程
java接口相关教程

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

10

2026.01.19

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
nginx浅谈
nginx浅谈

共15课时 | 0.8万人学习

前端开发(基础+实战项目合集)
前端开发(基础+实战项目合集)

共60课时 | 3.9万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号