1. 单例模式基础概念
单例模式是23种设计模式中最简单也是最常用的一种,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。我第一次接触单例模式是在开发一个日志系统时,当时多个模块都需要写入同一个日志文件,如果没有单例模式,就会导致日志内容混乱。
在C++中实现单例模式有几个关键要点:
- 私有化构造函数,防止外部直接实例化
- 删除拷贝构造函数和赋值运算符,防止通过拷贝方式创建新实例
- 提供一个静态方法获取唯一实例
提示:单例模式虽然简单,但在多线程环境下需要特别注意线程安全问题,这也是为什么会有饿汉和懒汉两种实现方式。
需要模型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)
- 单例对象在整个程序生命周期中一定会被使用
- 单例
