您的位置:首页 >C++单例模式实现详解
发布于2025-09-28 阅读(0)
扫一扫,手机访问
单例模式通过私有构造函数、静态实例和全局访问点确保类唯一实例。1. 懒汉模式延迟初始化,需加锁保证线程安全;2. 饿汉模式程序启动即创建,线程安全但可能浪费资源;3. 局部静态变量法(C++11)最推荐,线程安全、简洁且自动管理生命周期,配合删除拷贝和赋值操作确保唯一性。

单例模式确保一个类只有一个实例,并提供一个全局访问点。在C++中,实现单例模式需要控制构造函数的访问、定义静态实例以及提供静态获取方法。以下是几种常见的实现方式。
实例在第一次使用时才创建,适合资源敏感场景。
特点: 延迟加载,但需处理多线程安全问题。基础实现:
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 私有构造函数
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
// 静态成员定义
Singleton* Singleton::instance = nullptr;
上述版本在多线程环境下不安全。加锁后线程安全版本:
#include <mutex>
class Singleton {
private:
static Singleton* instance;
static std::mutex mtx;
Singleton() {}
public:
static Singleton* getInstance() {
std::lock_guard<std::mutex> lock(mtx);
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;
实例在程序启动时就创建,无需考虑多线程问题。
特点: 线程安全,但可能浪费资源。实现方式:
class Singleton {
private:
Singleton() {}
static Singleton instance; // 静态成员变量
public:
static Singleton& getInstance() {
return instance;
}
};
// 定义静态成员
Singleton Singleton::instance;
由于静态变量在程序启动时初始化,天然线程安全,适用于对象创建开销小且一定会使用的场景。
C++11 起,局部静态变量的初始化是线程安全的,这是最简洁且安全的方式。
class Singleton {
private:
Singleton() {}
~Singleton() {}
public:
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
static Singleton& getInstance() {
static Singleton instance; // 局部静态变量
return instance;
}};
优点: 自动管理生命周期,线程安全,代码简洁。
利用了“局部静态变量只初始化一次”的特性,编译器保证线程安全,无需手动加锁。
基本上就这些。局部静态变量方式是最推荐的现代C++单例实现。
下一篇:谷歌浏览器插件推荐及功能使用解析
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9