技术文摘
C++中单例的多种写法
2024-12-30 19:37:37 小编
C++中单例的多种写法
在 C++编程中,单例模式是一种常见且实用的设计模式。单例模式确保一个类只有一个实例存在,并提供全局访问点。下面我们来探讨几种常见的 C++中单例的写法。
懒汉式单例
懒汉式单例在第一次被调用时才创建实例。
class LazySingleton {
private:
static LazySingleton* instance;
LazySingleton() {}
public:
static LazySingleton* getInstance() {
if (instance == nullptr) {
instance = new LazySingleton();
}
return instance;
}
};
LazySingleton* LazySingleton::instance = nullptr;
饿汉式单例
饿汉式单例在程序启动时就创建实例。
class HungrySingleton {
private:
static HungrySingleton instance;
HungrySingleton() {}
public:
static HungrySingleton& getInstance() {
return instance;
}
};
HungrySingleton HungrySingleton::instance;
双重检查锁单例
这是一种优化的懒汉式单例,通过双重检查锁来提高性能。
class DoubleCheckSingleton {
private:
static DoubleCheckSingleton* instance;
static std::mutex mtx;
DoubleCheckSingleton() {}
public:
static DoubleCheckSingleton* getInstance() {
if (instance == nullptr) {
std::lock_guard<std::mutex> lock(mtx);
if (instance == nullptr) {
instance = new DoubleCheckSingleton();
}
}
return instance;
}
};
DoubleCheckSingleton* DoubleCheckSingleton::instance = nullptr;
std::mutex DoubleCheckSingleton::mtx;
静态局部变量单例
利用 C++中局部静态变量的特性实现单例。
class StaticLocalSingleton {
private:
StaticLocalSingleton() {}
public:
static StaticLocalSingleton& getInstance() {
static StaticLocalSingleton instance;
return instance;
}
};
不同的单例写法在不同的场景下各有优劣。懒汉式单例延迟创建实例,节省资源,但在多线程环境下可能存在问题;饿汉式单例简单直接,但可能在程序启动时就消耗不必要的资源;双重检查锁单例在多线程环境下性能较好,但代码相对复杂;静态局部变量单例写法简洁,线程安全。
在实际编程中,根据具体的需求和项目特点,选择合适的单例写法,能够有效地管理资源和提高程序的可维护性。
- GPT-4 研究实锤:3 个月内数学与代码能力大幅下降
- 10 大最恐怖的 UI/UX 设计失误
- 负载测试是什么?
- API 速率限制服务系统的优秀设计思考
- SpringCloud Gateway 底层路由配置定位原理深度剖析
- React 的卓越实践
- 五种提升 API 可靠性的方式
- 精通 CSS 关键属性:Inherit、Initial、Unset、Revert 以提升样式掌控力
- 微软开源 TypeChat 库 换种提示助力大语言模型 一行代码即可安装
- JavaScript 中生成器的作用是什么?
- JavaScript window navigator 详解(上篇)
- 十个 JavaScript 对象处理实用技巧
- JS 框架榜单官方结果出人意料!感恩大佬凌晨 3 点为 Strve.js 提交的 PR!
- 深入解读 JavaScript window navigator 下篇
- C++98 至 C++26 经历了哪些变迁?