C++单例模式实现:饿汉与懒汉模式详解

1. 单例模式基础概念

单例模式是23种设计模式中最简单也是最常用的一种,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。我第一次接触单例模式是在开发一个日志系统时,当时多个模块都需要写入同一个日志文件,如果没有单例模式,就会导致日志内容混乱。

在C++中实现单例模式有几个关键要点:

  1. 私有化构造函数,防止外部直接实例化
  2. 删除拷贝构造函数和赋值运算符,防止通过拷贝方式创建新实例
  3. 提供一个静态方法获取唯一实例

提示:单例模式虽然简单,但在多线程环境下需要特别注意线程安全问题,这也是为什么会有饿汉和懒汉两种实现方式。

需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。

2. 饿汉模式深度解析

2.1 饿汉模式实现原理

饿汉模式的实现非常直接,它在程序启动时(main函数执行前)就完成了单例对象的初始化。这种方式的线程安全性是由C++的静态变量初始化机制保证的。

cpp复制class HungrySingleton {
public:
    static HungrySingleton* getInstance() {
        return &_instance;
    }
    
    void doSomething() {
        cout << "HungrySingleton working" << endl;
    }

private:
    HungrySingleton() = default;
    ~HungrySingleton() = default;
    HungrySingleton(const HungrySingleton&) = delete;
    HungrySingleton& operator=(const HungrySingleton&) = delete;
    
    static HungrySingleton _instance;
};

// 关键点:在类外初始化静态成员
HungrySingleton HungrySingleton::_instance;

2.2 饿汉模式的特点与适用场景

在实际项目中,我发现饿汉模式特别适合以下场景:

  • 单例对象初始化耗时短(不超过100ms)
  • 单例对象在整个程序生命周期中一定会被使用
  • 单例

内容推荐

已经到底了哦
已经到底了哦