0

0

c++ 如何实现单例设计模式_c++单例模式的几种实现方式

冰火之心

冰火之心

发布时间:2025-11-14 21:47:02

|

1009人浏览过

|

来源于php中文网

原创

懒汉模式线程不安全,多线程可能创建多个实例;2. 加锁懒汉线程安全但性能低;3. 双重检查锁定减少锁开销,需C++11以上保证原子性;4. 饿汉模式程序启动即创建,线程安全但浪费资源;5. 局部静态变量方式最推荐,C++11起线程安全、延迟加载且简洁。

c++ 如何实现单例设计模式_c++单例模式的几种实现方式

单例设计模式确保一个类只有一个实例,并提供全局访问点。在C++中,有多种实现方式,每种都有其适用场景和注意事项。以下是几种常见的C++单例模式实现方法。

1. 懒汉模式(Lazy Initialization) - 线程不安全

懒汉模式在第一次调用时才创建实例,适合资源敏感的场景。

// 基本懒汉实现

class Singleton {
private:
    static Singleton* instance;
    Singleton() {}

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() {}

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

3. 双重检查锁定(Double-Checked Locking)

减少锁竞争,只在初始化时加锁,提升性能。

class Singleton {
private:
    static Singleton* instance;
    static std::mutex mtx;
    Singleton() {}

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

注意:需确保指针赋值是原子操作,C++11后基本支持。

响应式黑色展台设计整站模板1.4.2
响应式黑色展台设计整站模板1.4.2

响应式黑色展台设计整站模板,自带内核安装即用,图片文本实现可视化,方便修改,支持多种内容模型及自定义功能,可根据需要自行添加。模板特点: 1、安装即用,自带人人站CMS内核及企业站展示功能(产品,新闻,案例展示等),并可根据需要增加表单 搜索等功能(自带模板) 2、支持响应式 3、前端banner轮播图文本均已进行可视化配置 4、伪静态页面生成 5、支持内容模型、多语言、自定义表单、筛选、多条件搜

下载

4. 饿汉模式(Eager Initialization)

在程序启动时就创建实例,天生线程安全,但可能浪费资源。

class Singleton {
private:
    static Singleton instance;
    Singleton() {}

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

优点:无延迟,线程安全;缺点:即使不用也会创建。

5. 局部静态变量(推荐)

C++11起,局部静态变量初始化是线程安全的,简洁高效。

class Singleton {
private:
    Singleton() {}

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

这是目前最推荐的方式:线程安全、延迟加载、代码简洁。

基本上就这些常见实现方式。选择哪种取决于是否需要延迟加载、线程安全要求以及C++标准支持情况。现代C++项目优先使用局部静态变量方式。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

713

2023.08.22

c++怎么把double转成int
c++怎么把double转成int

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

49

2025.08.29

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

95

2025.10.23

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

458

2024.01.03

python中class的含义
python中class的含义

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

7

2025.12.06

线程和进程的区别
线程和进程的区别

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

472

2023.08.10

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

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

109

2025.12.24

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

44

2025.12.31

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 5.8万人学习

C 教程
C 教程

共75课时 | 3.8万人学习

C++教程
C++教程

共115课时 | 10.7万人学习

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

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