C++单例 singleton的实现
在这个单例模式的实现中,使用了静态局部变量来确保只有一个实例。
静态局部变量只会在第一次调用函数时初始化,并且在程序的整个生命周期内保持其值不变。
这意味着,无论多少次调用 getInstance()
方法,都只会在第一次调用时创建一个实例,后续的调用会返回同一个实例。
具体来说,在 getInstance()
方法中,静态局部变量 instance
在第一次调用时会被初始化,
然后该实例将一直存在于程序的整个生命周期中,直到程序结束。
因此,无论调用 getInstance()
方法多少次,都只会返回同一个实例。
#include <iostream> class Singleton { public: // 获取单例实例的静态方法 static Singleton& getInstance() { // 使用静态局部变量确保线程安全的懒汉式单例模式 static Singleton instance; return instance; } // 单例类的其他方法和成员 void showMessage() { std::cout << "Hello, I am a singleton instance!" << std::endl; } private: // 将构造函数和析构函数设为私有,防止外部创建和删除对象 Singleton() {} ~Singleton() {} // 禁止复制和赋值操作,确保只有一个实例 Singleton(const Singleton&) = delete; Singleton& operator=(const Singleton&) = delete; }; int main() { { // 获取单例实例 Singleton& instance1 = Singleton::getInstance(); instance1.showMessage(); } { // 获取单例实例 Singleton& instance2 = Singleton::getInstance(); instance2.showMessage(); // 获取单例实例 Singleton& instance3 = Singleton::getInstance(); instance3.showMessage(); } return 0; }
这个单例模式的实现是线程安全的,因为它使用了静态局部变量。在 C++11 标准及之后的标准中,静态局部变量的初始化是线程安全的。
当第一次调用 getInstance()
方法时,静态局部变量 instance
会被初始化,这个过程是线程安全的。具体来说,C++11标准保证了静态局部变量的初始化是线程安全的,因为编译器会生成线程安全的代码来确保静态局部变量只会被初始化一次,即使在多线程环境下也不会出错。
因此,这个单例模式是线程安全的,可以在多线程环境中安全地使用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2023-03-10 python pandas 构造空的DataFrame,Series对象
2023-03-10 python pandas DataFrame,Series进一步理解
2023-03-10 python-pandas DataFrame,Series笔记2