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

C++ 写单例的办法

先在头文件声明:

声明一个COemInstancer的 _this指针:

static COemInstance* _this;

.然后在文件外层这样写:

#define CXXModule COemInstance::instance()

#define ExecuteCommand(ClassName,RunCommand) class Tempclass##ClassName\
{public:Tempclass##ClassName(){RunCommand;}};\
 Tempclass##ClassName g_Tempclass##ClassName;

cpp:这样写:

先全局声明:

COemInstance * COemInstance::_this = nullptr;

ExecuteCommand(COemInstance, COemInstance::instance())

调用的时候就可以

 CXXModule--->xxx

多一层ExecuteCommand 的好处是确保百分百加载,然后在多线程中确保安全加载

COemInstance* COemInstance::instance()
{
    if (!_this)
    {
        if (!_bDestoryed_)
        {
            _this = new COemInstance();
            //_this->Initialization();
            atexit(&COemInstance::destory);
        }
    }
    return _this;
}

void COemInstance::destory()
{
    if (_this)
    {
        delete _this;
        _this = NULL;
        _bDestoryed_ = true;
    }
}
 

http://www.xdnf.cn/news/699823.html

相关文章:

  • 北京大学肖臻老师《区块链技术与应用》公开课:04-BTC-共识协议
  • Linux下基本指令的介绍
  • PINN是否需要对空间进行网格化
  • 挖o心得(4)
  • 【深度学习-pytorch篇】4. 正则化方法(Regularization Techniques)
  • 使用u盘重装银河麒麟操作系统
  • 【人工智能】微调革命:释放大模型的无限潜能
  • 【系统架构设计师】2025年上半年真题论文回忆版: 论软件测试方法及应用(包括解题思路和参考素材)
  • 社交类网站设计:经典feed流系统架构详细设计(小红书微博等)
  • window 显示驱动开发-处理 E_INVALIDARG 返回值
  • ArgoDB表类型及常用命令
  • 491. Non-decreasing Subsequences
  • DeepSeek R1 与 V3 的全面对比,两个版本有什么差别?
  • 【Linux】linux上看到的内存和实际内存不一样?
  • Linux云计算训练营笔记day17(Python)
  • Cisco Packer Tracer 组建虚拟局域网(VLAN)
  • 【前端】【Jquery】一篇文章学习Jquery所有知识点
  • keepalived两台设备同时出现VIP问题
  • MySql--explain的用法
  • 【Linux网络篇】:简单的TCP网络程序编写以及相关内容的扩展
  • css样式块重复调用
  • 楼宇自控系统重塑建筑设备管理:告别低效,迈向智能管理时代
  • 华为OD机试真题——书籍叠放(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • Linux系统之cal命令的基本使用
  • 国有企业采购方式及适用情形
  • Java集合进阶
  • C++补充基础小知识:什么是接口类 和 抽象类?为什么要继承?
  • 线程的生命周期?怎么终止线程?线程和线程池有什么区别?如何创建线程池?说一下 ThreadPoolExecutor 的参数含义?
  • yolov12毕设前置知识准备 1
  • Linux基本指令/上