单例模式确保类唯一实例并提供全局访问。C++中常用局部静态变量实现(C++11线程安全),推荐此法因简洁高效;懒汉模式支持延迟初始化但需加锁防竞态;饿汉模式启动即创建,线程安全但可能浪费资源;智能指针可防内存泄漏,但多线程下仍需同步。优先选用局部静态变量方式。

单例设计模式确保一个类只有一个实例,并提供全局访问点。在C++中实现单例模式,需控制构造函数的访问、禁止拷贝,并保证线程安全和资源释放。以下是几种常见且实用的实现方式。
实例在第一次使用时才创建,适合启动开销较大的场景。
// 线程安全的懒汉模式(C++11 及以上)static std::mutex mtx;
class Singleton {
立即学习“C++免费学习笔记(深入)”;
private:
Singleton() = default;
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
static Singleton* instance;
public:
static Singleton* getInstance() {
if (instance == nullptr) {
std::lock_guard<std::mutex> lock(mtx);
if (instance == nullptr) {
instance = new Singleton();
}
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
这种方式使用双重检查锁定减少锁竞争,C++11 起内存模型支持局部静态变量的线程安全,更推荐下面的方法。
C++11 标准保证局部静态变量的初始化是线程安全的,简洁且高效。
class Singleton {
立即学习“C++免费学习笔记(深入)”;
private:
Singleton() { }
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
public:
static Singleton& getInstance() {
static Singleton instance;
return instance;
}
};
调用 Singleton::getInstance() 即可获取唯一实例。析构由系统自动处理,无需手动释放。
在程序加载时就创建实例,避免运行时开销,适用于对启动时间不敏感的场景。
class Singleton {
立即学习“C++免费学习笔记(深入)”;
private:
Singleton();
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
static Singleton instance;
public:
static Singleton& getInstance() {
return instance;
}
};
Singleton Singleton::instance;
优点是绝对线程安全,缺点是可能提前占用资源。
若必须动态分配,可用 std::unique_ptr 管理实例,结合 atexit 或静态析构保证释放。
class Singleton {
立即学习“C++免费学习笔记(深入)”;
private:
Singleton();
static std::unique_ptr<Singleton> instance;
public:
static Singleton& getInstance() {
if (!instance) {
instance = std::make_unique<Singleton>();
}
return *instance;
}
};
std::unique_ptr<Singleton> Singleton::instance = nullptr;
注意:仍需加锁处理多线程环境下的竞态条件。
基本上就这些。推荐优先使用局部静态变量方式,简洁、安全、高效。避免过度设计,除非有特殊需求如跨 DLL 共享实例或自定义销毁顺序。
以上就是c++++如何实现单例设计模式 _c++单例模式实现技巧的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号