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

【QT】C++线程安全的单例模板

模板代码

#pragma once
#include <mutex>
#include <atomic>// CRTP基类模板 Curiously Recurring Template Parttern—奇异递归模板模式。
template <typename T>
class SingletonCRTP {
public:// 禁止拷贝构造和赋值操作SingletonCRTP(const SingletonCRTP&) = delete;SingletonCRTP& operator=(const SingletonCRTP&) = delete;// 禁止移动构造和赋值操作SingletonCRTP(SingletonCRTP&&) = delete;SingletonCRTP& operator=(SingletonCRTP&&) = delete;// 获取单例实例static T* getInstance() {if (m_instance == nullptr) {std::unique_lock<std::mutex> lock(m_Mutex); // 加锁if (m_instance == nullptr) {T* temp = new (std::nothrow) T();if (temp == nullptr) {throw std::bad_alloc();}m_instance = temp;}}return m_instance;}protected:SingletonCRTP() = default;~SingletonCRTP() {if (m_instance) {delete m_instance;m_instance = nullptr;}}// 静态成员变量定义static T* m_instance;static std::mutex m_Mutex;
};// 静态成员变量的模板类特化
template <typename T>
T* SingletonCRTP<T>::m_instance = nullptr;template <typename T>
std::mutex SingletonCRTP<T>::m_Mutex;

使用方式

#include "SingletonCRTP.h"
class Class1 : public SingletonCRTP<Class1>
{friend class SingletonCRTP<Class1>;
public:void DoDoDo() {printf("Hello World!");}}
int main(int argc, char *argv[])
{Class1::getInstance()->DoDoDo();
}
http://www.lryc.cn/news/515017.html

相关文章:

  • node.js内置模块之---EventEmitter 类
  • SWM221系列芯片之电机应用及控制
  • 单片机-静动态数码管实验
  • Fabric环境部署
  • VisualRules规则引擎语法介绍
  • enzymejest TDD与BDD开发实战
  • Statistic for ML
  • Django 中数据库迁移命令
  • 【机器学习】 卷积神经网络 (CNN)
  • Linux中操作中的无痕命令history技巧
  • 在CE自动汇编里调用lua函数
  • 如何在没有 iCloud 的情况下将联系人从 iPhone 传输到 iPhone
  • 欧科云链研究院:ChatGPT 眼中的 Web3
  • 行为模式2.命令模式------灯的开关
  • Kerberos用户认证-数据安全-简单了解-230403
  • 【Multisim用74ls92和90做六十进制】2022-6-12
  • 滴滴工作流引擎Turbo与logicFlow研究
  • AE Pinnacle 10x6 kW DeviceNet MDXL User r Manual
  • Flutter Android修改应用名称、应用图片、应用启动画面
  • Nginx rewrite 执行顺序(草稿,下次继续编辑)
  • 01.03周五F34-Day44打卡
  • 数字货币支付系统开发搭建:构建未来的区块链支付生态
  • NLP CH3复习
  • BurpSuite2024.11
  • 亚信安全2025年第1期《勒索家族和勒索事件监控报告》
  • 【工具进阶】使用 Nmap 进行有效的服务和漏洞扫描
  • 【工具推荐】XSS 扫描器-XSStrike
  • Spring Boot 各种事务操作实战(自动回滚、手动回滚、部分回滚)
  • Zabbix5.0版本(监控Nginx+PHP服务状态信息)
  • C# 设计模式概况