单例模式确保类唯一实例并提供全局访问点,C++中常用懒汉、饿汉和局部静态变量三种实现方式。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;
饿汉模式在程序启动时就创建实例,天然线程安全,但可能浪费资源。
立即学习“C++免费学习笔记(深入)”;
class Singleton {
private:
static Singleton instance;
Singleton() {}
public:
static Singleton& getInstance() {
return instance;
}
};
Singleton Singleton::instance;
由于静态成员变量在程序加载时初始化,不存在多线程竞争问题,简单可靠。
C++11 起,局部静态变量的初始化是线程安全的,这是最简洁且安全的实现方式。
class Singleton {
private:
Singleton() {}
public:
static Singleton& getInstance() {
static Singleton instance;
return instance;
}
};
这种写法自动保证线程安全,代码简洁,延迟初始化,无需手动管理内存。
使用单例模式时需注意以下几点:
对于需要显式释放资源的情况,可增加 release 方法:
static void release() {
if (instance != nullptr) {
delete instance;
instance = nullptr;
}
}
基本上就这些。局部静态变量的方式是最推荐的现代C++实现方法,简洁且安全。
以上就是c++++中如何实现单例模式_C++设计模式之单例模式实现详解的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号