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

单例设计模式确保一个类只有一个实例,并提供全局访问点。在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++免费学习笔记(深入)”;
#includeclass 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、安装即用,自带人人站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++项目优先使用局部静态变量方式。










