首页 > 后端开发 > C++ > 正文

c++中如何实现单例模式_c++设计模式之单例模式实现方法

裘德小鎮的故事
发布: 2025-10-11 17:19:01
原创
557人浏览过
单例模式通过私有构造函数、禁用拷贝和赋值,确保类唯一实例并提供全局访问点。饿汉式在程序启动时创建实例,线程安全,适用于对启动时间不敏感的场景,通过类外定义静态成员实现。懒汉式在首次调用时初始化,节省资源,但需处理线程安全问题。C++11后推荐使用局部静态变量的Meyer's Singleton,延迟初始化且自动线程安全。对于需精细控制生命周期或兼容旧标准的情况,可采用std::unique_ptr配合std::mutex实现带锁的懒汉式,避免内存泄漏。选择方式应根据项目需求和C++标准支持决定,现代C++中Meyer's Singleton为首选方案。

c++中如何实现单例模式_c++设计模式之单例模式实现方法

单例模式确保一个类只有一个实例,并提供一个全局访问点。在C++中实现单例模式,关键在于控制构造函数的访问权限、禁止拷贝和赋值,并保证线程安全的实例创建。

饿汉式(Eager Initialization)

饿汉式在程序启动时就创建实例,天然线程安全,适用于对启动时间不敏感的场景。

实现方式:静态成员变量在类外定义并初始化,对象在加载时即被构造。

示例代码:

class Singleton {
private:
    static Singleton instance;  // 静态实例
    Singleton() = default;     // 私有构造函数
<p>public:
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">static Singleton& getInstance() {
    return instance;
}

void doSomething() {
    // 示例方法
}
登录后复制

};

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

// 类外定义静态成员 Singleton Singleton::instance;

懒汉式(Lazy Initialization) + 双重检查锁定

懒汉式在第一次调用时才创建实例,节省资源,但需处理多线程并发问题。

C++11以后,使用局部静态变量可实现“Meyer's Singleton”,简洁且线程安全。

推荐写法(基于C++11局部静态):

创意艺术设计的网站模板
创意艺术设计的网站模板

创意艺术设计的网站模板 创意艺术是指是把再简单不过的东西或想法不断延伸给予的另一种表现方式,创意设计包括工业设计、建筑设计、包装设计、平面设计、服装设计、个人创意特区等内容。 设计除了具备“初级设计”和“次设计”的因素外,还需要融入“与众不同的设计理念——创意”。搜索 一、初级设计 范围划分一般是以是否在表达图形上是否以“具象化”为指导目标,标志设计就像绘画一样真实表现图形。 二、次级设

创意艺术设计的网站模板 50
查看详情 创意艺术设计的网站模板
class Singleton {
private:
    Singleton() = default;
<p>public:
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">static Singleton& getInstance() {
    static Singleton instance;  // 局部静态变量,延迟初始化,线程安全
    return instance;
}

void doSomething() {
    // 示例方法
}
登录后复制

};

带智能指针的懒汉式(手动管理)

若需要更精细控制生命周期或兼容旧标准,可用std::unique_ptr配合互斥锁实现。

注意:需确保析构顺序安全,避免静态析构问题。

#include <memory>
#include <mutex>
<p>class Singleton {
private:
static std::unique_ptr<Singleton> instance;
static std::mutex mtx;</p><pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">Singleton() = default;
登录后复制

public: Singleton(const Singleton&) = delete; Singleton& operator=(const Singleton&) = delete;

static Singleton* getInstance() {
    std::lock_guard<std::mutex> lock(mtx);
    if (!instance) {
        instance = std::unique_ptr<Singleton>(new Singleton);
    }
    return instance.get();
}
登录后复制

};

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

// 类外定义 std::unique_ptr<Singleton> Singleton::instance = nullptr; std::mutex Singleton::mtx;

关键要点总结

  • 私有化构造函数、拷贝构造和赋值操作符,防止外部创建多个实例
  • 使用static局部变量是C++11后最简洁安全的方式
  • 饿汉式适合简单场景,懒汉式适合资源敏感型应用
  • 多线程环境下必须保证初始化过程的线程安全
  • 避免动态分配带来的内存泄漏风险,优先使用上静态对象

基本上就这些。选择哪种方式取决于项目需求和C++标准支持情况。Meyer's Singleton 是现代C++中最常用也最推荐的做法。

以上就是c++++中如何实现单例模式_c++设计模式之单例模式实现方法的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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