全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

c++ 单例模式实现 c++设计模式代码实例

单例模式确保类唯一实例并提供全局访问点,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::call_oncestd::once_flag 确保只初始化一次,是推荐的线程安全做法。

#include 

class 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小时内与您取得联系。