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

单例模式(懒汉模式/饿汉模式)

相关概念参考:【C++】C++ 单例模式总结(5种单例实现方法)_单例模式c++实现-CSDN博客

#include<iostream>

class LazySingle{
public:
    static LazySingle& getInstance(){
        static LazySingle instance;
        return instance;
    }

    void hello(){
        std::cout<<"Congratulations"<<std::endl;
    }

private:
    LazySingle(){};
};
class LazySinglePtr{
    public:
        static LazySinglePtr* getInstance(){
            static LazySinglePtr instance;
            return &instance;
        }
    
        void hello(){
            std::cout<<"Congratulations"<<std::endl;
        }
    
    private:
        LazySinglePtr(){};
};

class HungrySingle{
public:
    static HungrySingle& getInstance(){
        return instance_;
    }

private:
    static HungrySingle instance_;
    HungrySingle(){};
};

HungrySingle  HungrySingle::instance_;

int main(){
    std::cout<<"懒汉引用模式:"<<std::endl;
    auto& lazy1=LazySingle::getInstance();
    LazySingle& lazy2=LazySingle::getInstance();
    std::cout<<" lzay1="<<&lazy1<<" lzay2="<<&lazy2<<" instance="<<&LazySingle::getInstance()<<std::endl;
    lazy1.hello();

    std::cout<<"懒汉指针模式:"<<std::endl;
    auto lazyptr1=LazySinglePtr::getInstance();
    LazySinglePtr* lazyptr2=LazySinglePtr::getInstance();
    std::cout<<" lzay1="<<lazyptr1<<" lzay2="<<lazyptr2<<" instance="<<LazySinglePtr::getInstance()<<std::endl;
    lazyptr1->hello();
    
    std::cout<<"饿汉模式:"<<std::endl;
    HungrySingle& hungry1=HungrySingle::getInstance();
    HungrySingle& hungry2=HungrySingle::getInstance();
    std::cout<<" hungry1="<<&hungry1<<" hungry2="<<&hungry2<<" instance="<<&HungrySingle::getInstance()<<std::endl;

    return 0;
    
}

输出:

懒汉引用模式:
 lzay1=0x7ff61a279e90 lzay2=0x7ff61a279e90 instance=0x7ff61a279e90
Congratulations
懒汉指针模式:
 lzay1=0x7ff61a279ee0 lzay2=0x7ff61a279ee0 instance=0x7ff61a279ee0
Congratulations
饿汉模式:
 hungry1=0x7ff61a2aa030 hungry2=0x7ff61a2aa030 instance=0x7ff61a2aa030

 

相关文章:

  • 服务器数据恢复—误格式化NTFS文件系统分区别慌,NTFS数据复活秘籍
  • linux ubuntu下查询包是否包含某个工具
  • 移远通信推出超小Wi-Fi+BLE模组FGM842D系列,赋能智能家居与工业物联网高效互联
  • 【Easylive】MyBatis 批量插入或更新语句解析insertOrUpdateBatch
  • 12.小节
  • 关于React Redux
  • 【3. 软件工程】3.0 软件工程概述
  • Android View事件分发机制深度解析
  • QuecPython 的 VScode 环境搭建和使用教程
  • IS-IS认证
  • MySQL日志管理
  • NVR接入录像回放平台EasyCVR视频融合平台城市/乡镇污水处理厂解决方案
  • 计算机等级考试数据库三级(笔记2)
  • 032-overlayYUV
  • 深入解析Kapt —— Kotlin Annotation Processing Tool 技术博客
  • 使用 Portainer 轻松管理 Docker 环境:完整安装与使用指南
  • MD编辑器中的段落缩进怎么操作
  • 链路追踪Skywalking
  • QT实现四则运算计算器(QT实操1)
  • 多台服务器上docker部署 Redis 集群
  • 竞彩湃|德甲欧冠资格竞争白热化,伯恩茅斯主场迎恶战
  • 河北邯郸一酒店婚宴发生火灾:众人惊险逃生,酒店未买保险
  • 黑灰产工作室为境外诈骗集团养号引流,冒充美女与男性裸聊后敲诈勒索
  • 李在明正式登记参选下届韩国总统
  • 央行:当前我国债券市场定价效率、机构债券投资交易和风险管理能力仍有待提升
  • 第一集|《刑警的日子》很生活,《执法者们》有班味