单例模式确保类唯一实例并提供全局访问点。1. 懒汉模式延迟创建但线程不安全;2. 双重检查锁定加互斥锁实现线程安全懒加载;3. 饿汉模式程序启动即创建,线程安全但影响启动性能;4. 局部静态变量利用c++11特性,线程安全且简洁推荐。

单例模式(Singleton Pattern)是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。在C++中,实现单例模式需要考虑线程安全、构造函数私有化、禁止拷贝等细节。下面介绍几种常见的C++单例模式实现方式。
1. 懒汉模式(懒加载,线程不安全)
这种实现方式在第一次调用时才创建实例,但未考虑多线程环境下的竞争问题:
class Singleton {
private:
static Singleton* instance;
Singleton() = default; // 私有构造函数
Singleton(const Singleton&) = delete; // 禁止拷贝
Singleton& operator=(const Singleton&) = delete; // 禁止赋值
<p>public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};</p><p>// 静态成员定义
Singleton* Singleton::instance = nullptr;</p>这种方式在多线程环境下可能创建多个实例,不适合并发场景。
2. 懒汉模式 + 双重检查锁定(线程安全)
使用互斥锁和双重检查机制,保证线程安全且只创建一次实例:
立即学习“C++免费学习笔记(深入)”;
#include <mutex>
<p>class Singleton {
private:
static Singleton* instance;
static std::mutex mtx;
Singleton() = default;
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;</p><p>public:
static Singleton* getInstance() {
if (instance == nullptr) {
std::lock_guard<std::mutex> lock(mtx);
if (instance == nullptr) {
instance = new Singleton();
}
}
return instance;
}
};</p><p>Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;</p>这种写法避免了每次调用都加锁的性能损耗,适合多线程环境。
该系统采用多层模式开发,这个网站主要展示女装的经营,更易于网站的扩展和后期的维护,同时也根据常用的SQL注入手段做出相应的防御以提高网站的安全性,本网站实现了购物车,产品订单管理,产品展示,等等,后台实现了动态权限的管理,客户管理,订单管理以及商品管理等等,前台页面设计精致,后台便于操作等。实现了无限子类的添加,实现了动态权限的管理,支持一下一个人做的辛苦
3. 饿汉模式(线程安全)
在程序启动时就创建实例,天然线程安全,因为没有延迟初始化的竞争问题:
class Singleton {
private:
static Singleton instance;
Singleton() = default;
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
<p>public:
static Singleton& getInstance() {
return instance;
}
};</p><p>// 全局静态初始化
Singleton Singleton::instance;</p>优点是简单且线程安全,缺点是即使未使用也会被创建,可能影响启动性能。
4. 局部静态变量(推荐,C++11起线程安全)
C++11标准规定局部静态变量的初始化是线程安全的,这是最简洁且安全的实现:
class Singleton {
private:
Singleton() = default;
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
<p>public:
static Singleton& getInstance() {
static Singleton instance; // 局部静态变量,首次调用时初始化
return instance;
}
};</p>该方式自动管理生命周期,无需手动释放,代码简洁,推荐在现代C++中使用。
基本上就这些常见实现方式。选择哪种取决于你的需求:是否需要懒加载、是否多线程、是否追求简洁。对于大多数情况,局部静态变量方式是最优解。









