单例设计模式

一、饿汉式

饿汉式的单例模式,可以确保在程序运行期间只会创建一个实例,但是它的缺点是在程序启动时就会创建实例,无论是否需要,可能会造成资源浪费。

代码示例:

cpp 复制代码
/*
    单例设计模式:保证一个类只有一个实例,并提供一个全局访问点来获取该实例
    具体实现方式:
        饿汉类
        懒汉类
*/

#include <iostream>
using namespace std;
class Singleton{
    private:
        static Singleton* instance;
        Singleton(){}
    public:
        static Singleton* getInstance()
        {
            return instance;
        }
};
Singleton* Singleton::instance = new Singleton();//类外初始化不是访问,饿汉式实现

int main()
{
    Singleton *s1 = Singleton::getInstance();
    Singleton *s2 = Singleton::getInstance();
    if(s1 == s2)
    {
        cout<<"同一个实例"<<endl;
    }
    else
    {
        cout<<"不是单例"<<endl;
    }
    return 0;
}

运行结果:

cpp 复制代码
同一个实例

二、懒汉式

代码示例:

cpp 复制代码
#include <iostream>
using namespace std;

class Singleton{
    private:
        static Singleton* instance;
        //私有构造函数,防止实例化
        Singleton(){}
    public:
        //获取单例实例的方法
        static Singleton* getInstance()
        {
            //判断静态指针如果是空,开辟新空间
            if(instance == nullptr)
            {
                instance = new Singleton();
            }
            //如果不为空,输出静态指针地址
            return instance;
        }
};
Singleton* Singleton::instance = nullptr;//类外初始化不是访问,懒汉式实现

int main()
{
    Singleton *s1 = Singleton::getInstance();
    Singleton *s2 = Singleton::getInstance();
    if(s1 == s2)
    {
        cout<<"同一个实例"<<endl;
    }
    else
    {
        cout<<"不是单例"<<endl;
    }
    return 0;
}

运行结果:

cpp 复制代码
同一个实例
相关推荐
森林古猿19 分钟前
再论斜率优化
c++·学习·算法
leo__52017 分钟前
基于导航数据的扩展卡尔曼滤波(EKF)MATLAB 实现
开发语言·matlab
万法若空18 分钟前
【数学-简单数论】同余中的逆
线性代数·算法
水利行业RTU手艺人19 分钟前
RTU固件中的“数据保险箱”——离线数据补发系统设计
c++·stm32·单片机·物联网
gugucoding36 分钟前
25. 【C语言】二进制文件与随机读写
c语言·开发语言
北极星日淘37 分钟前
中古货品品相评级算法实战|Java权重计分实现标准化五级品相体系
开发语言·python
小巧的砖头1 小时前
C#会重蹈覆辙吗?系列之2:反射及元数据的性能问题
开发语言·前端·c#
凯瑟琳.奥古斯特1 小时前
力扣1009补码解法C++实现
开发语言·c++·算法·leetcode·职场和发展
KaMeidebaby1 小时前
卡梅德生物技术快报|蛋白的叠氮基修饰:实操解析:核酸模板耦合蛋白的叠氮基修饰实现靶蛋白定点共价标记
前端·人工智能·物联网·算法·百度
2601_963645921 小时前
【2026最新】MATLAB教程(附安装包,非常详细)
开发语言·matlab·信息可视化