技术文摘
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;
}
};
不同的单例写法在不同的场景下各有优劣。懒汉式单例延迟创建实例,节省资源,但在多线程环境下可能存在问题;饿汉式单例简单直接,但可能在程序启动时就消耗不必要的资源;双重检查锁单例在多线程环境下性能较好,但代码相对复杂;静态局部变量单例写法简洁,线程安全。
在实际编程中,根据具体的需求和项目特点,选择合适的单例写法,能够有效地管理资源和提高程序的可维护性。
- CMD 命令行中 cd 命令的使用之道
- 华为鸿蒙系统软件删除方法教程
- DOS 中删除文件夹与文件的两类办法
- 如何打开 page 格式及用什么打开 page 文件
- fdisk/mbr 命令与主引导区的解析
- 如何查看华为鸿蒙系统正在运行的服务
- 怎样消除快捷方式(快捷键)的小箭头
- 如何在 Ubuntu18.04 中查看隐藏文件
- dos的含义及dos命令解析
- 回收站清空后的恢复方法
- OpenHarmony v2.2 Beta2 的更新内容有哪些
- 电脑待机的含义及功耗是多少
- 如何进入 ubuntu18.04 的 grub 引导界面
- 鸿蒙系统文字识别功能位置及图片文字提取技巧
- 电脑复制粘贴失效的缘由及对策