C++11局部静态变量实现单例最推荐——利用其线程安全、延迟初始化特性,代码简洁且无需手动管理内存;饿汉式启动即构造但不支持延迟初始化;手动指针方式需自行处理线程安全与释放。

单例模式确保一个类只有一个实例,并提供全局访问点。C++ 中常用 懒汉式(线程安全) 和 饿汉式 两种实现,现代 C++(C++11 起)推荐用局部静态变量方式——简洁、线程安全、延迟初始化。
利用 C++11 标准中“函数内局部静态变量的初始化是线程安全的”特性:
class Singleton {
public:
static Singleton& getInstance() {
static Singleton instance; // ✅ 延迟初始化 + 线程安全
return instance;
}
<pre class='brush:php;toolbar:false;'>Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;private: Singleton() = default; // 私有构造,禁止外部创建 ~Singleton() = default; // 可选:若需自定义析构可设为 public/protected };
使用方式:
int main() {
auto& s1 = Singleton::getInstance();
auto& s2 = Singleton::getInstance();
// s1 和 s2 是同一个对象(地址相同)
return 0;
}getInstance(),否则导致无限递归或未定义行为全局静态对象,程序启动时即构造,天然线程安全,但不支持延迟初始化:
立即学习“C++免费学习笔记(深入)”;
《PHP设计模式》首先介绍了设计模式,讲述了设计模式的使用及重要性,并且详细说明了应用设计模式的场合。接下来,本书通过代码示例介绍了许多设计模式。最后,本书通过全面深入的案例分析说明了如何使用设计模式来计划新的应用程序,如何采用PHP语言编写这些模式,以及如何使用书中介绍的设计模式修正和重构已有的代码块。作者采用专业的、便于使用的格式来介绍相关的概念,自学成才的编程人员与经过更多正规培训的编程人员
341
class Singleton {
public:
static Singleton& getInstance() {
return instance;
}
<pre class='brush:php;toolbar:false;'>Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;private: Singleton() = default; static Singleton instance; // 全局唯一实例 };
// 定义静态成员(必须在 .cpp 文件中) Singleton Singleton::instance;
适用于需控制销毁时机或 C++98 环境(不推荐新项目使用):
class Singleton {
public:
static Singleton* getInstance() {
if (!instance) {
instance = new Singleton();
}
return instance;
}
<pre class='brush:php;toolbar:false;'>static void destroy() {
delete instance;
instance = nullptr;
}private: Singleton() = default; static Singleton* instance; };
Singleton* Singleton::instance = nullptr;
⚠️ 缺点:需手动调用 destroy(),否则内存泄漏;多线程下 getInstance() 非线程安全(需加锁)。
基本上就这些。C++11 的局部静态变量方案最值得优先采用——不用锁、不担心析构顺序、代码干净、语义清晰。
以上就是C++如何实现单例模式?(代码示例)的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号