当前位置: 首页 > news >正文

C++ 单例模式一种实现方式

在软件开发中,单例模式是一种常见的设计模式。单例模式确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。这种模式在很多场景下都非常有用,比如配置管理、日志记录等,因为在这些场景中,我们通常只需要一个全局的实例来处理相关事务。

单例模式的实现思路

单例模式的实现主要有以下几个关键点:

  1. 私有化构造函数:防止外部代码直接创建类的实例。
  2. 静态成员变量:用于存储类的唯一实例。
  3. 静态成员函数:提供一个全局访问点,用于获取类的唯一实例。

为了确保线程安全,在多线程环境下,我们还需要对实例的创建过程进行同步处理。

代码实现

下面是一个使用 C++ 实现的单例模式代码示例:

#ifndef __SINGLETON_H
#define __SINGLETON_H
#include "sync.h"template<class T>
class CSingleton
{
public:static T* Instance(){if (NULL == m_pInstance){MutexObject lock(&mutex);if (NULL == m_pInstance){T* ptmp = new T();m_pInstance = ptmp;}}return m_pInstance;} static void Destory(){if (m_pInstance){delete m_pInstance;m_pInstance = NULL;}}protected://防止实例CSingleton() {}//防止拷贝构造一个实例CSingleton(const CSingleton&) {}//防止赋值出另一个实例CSingleton& operator=(const CSingleton&){} virtual ~CSingleton(){}private:static T*		m_pInstance;static Mutex	mutex;
};template<class T> T* CSingleton<T>::m_pInstance = NULL;
template<class T> Mutex CSingleton<T>::mutex;#endif

代码解释

  1. 模板类 CSingleton:这是一个模板类,允许我们将任意类型 T 转换为单例模式。
  2. Instance() 方法:这是获取单例实例的静态方法。它采用了双重检查锁定(Double-Checked Locking)机制,先检查实例是否已经创建,如果没有创建,则加锁再次检查,确保在多线程环境下只有一个实例被创建。
  3. Destory() 方法:这是销毁单例实例的静态方法,用于释放实例占用的内存。
  4. 构造函数和拷贝构造函数:构造函数和拷贝构造函数被声明为 protected,防止外部代码直接创建或拷贝实例。
  5. 赋值运算符:赋值运算符被声明为 protected,防止通过赋值操作创建新的实例。
  6. 静态成员变量m_pInstance 用于存储单例实例,mutex 用于线程同步。

总结

通过上述代码,我们实现了一个线程安全的单例模式。双重检查锁定机制确保了在多线程环境下只有一个实例被创建,同时避免了每次调用 Instance() 方法时都加锁的开销。这种实现方式既保证了线程安全,又提高了性能。

相关文章:

  • 【系统规划与管理师第二版】1.2 信息技术及其发展
  • GitHub Copilot 是什么,怎么使用
  • Spring WebFlux和Spring MVC的对比
  • 字符编码(UTF-8,16,32 和GBK和ASCLL码)
  • conda(Anaconda/Miniconda)常用命令
  • 使用 `Expect` 工具实现了自动化文件传输
  • c++11右值引用(rvalue reference)
  • FastAPI lifespan示例
  • 生态环评GIS/遥感制图:土地利用+植被覆盖+土壤侵蚀+水系提取,ArcGIS+ENVI实战
  • 响应式数据可视化大屏解决方案,重构工业交互体验
  • Chapter15 cross-origin resource sharing
  • Windsurf SWE-1模型评析:软件工程的AI革命
  • 上海人工智能实验室明珠湖会议首开,解答AI前沿疑问,推进科学智能
  • [论文阅读] 人工智能+软件工程 | 用大语言模型架起软件需求形式化的桥梁
  • 组态王工程运行时间显示
  • 开疆智能ModbusTCP转EtherCAT网关连接IVO编码器配置案例
  • 华为云Flexus+DeepSeek征文 | 利用Dify平台构建多智能体协作系统:从单体到集群的完整方案
  • 可编辑64页PPT | 基于DeepSeek的数据治理方案
  • CARSIM-与C#自动化测试方案
  • 自托管媒体跟踪器Yamtrack
  • 太原自助模板建站/北京seo公司哪家好
  • 网站流量站怎么做的/佛山营销型网站建设公司
  • 数字媒体应用 网站开发/google引擎免费入口
  • 建设主流媒体网站/专业关键词优化平台
  • 页面做的好看的网站/郑州网络营销排名
  • 临汾市建设局网站/2345浏览器下载