单例设计模式

1. 什么是单例模式

单例模式(Singleton Pattern,也称为单件模式),使用最广泛的设计模式之一。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享(比如log 模块, 驱动模块)

定义一个单例类:

1> 私有化它的构造函数,以防止外界创建单例类的对象;
2> 使用类的私有静态指针变量指向类的唯一实例;
3> 使用一个公有的静态方法获取该实例。

单例模式 两种方式:

1: 懒汉模式:
这种方式可以理解为 在第一次调用的时候,才会创建对象。

LAZY *LAZY::getinstance()
{   
    if(nullptr == instance)
    {
        instance = new LAZY();
    }
    return instance;
}

这种存在两种安全隐患:
1> 内存泄漏问题:
你创建好后, 没办法回收资源。
(解决: 嵌套类删除, 智能指针)
2> 线程不安全:
在多线程中 可能存在, a线程正在创建对象时, 但还没有完成。 b线程也在创建, 判断 nullptr == instance 为真, 有去创建。
(解决: c++11 采用加锁机制。)

2: 饿汉模式
程序在编译一期间就开始已经创建。

        static engre* getinstance()
        {
            static engre instance;
            return &instance;
        }

在 c++11 中局部静态变量 属于线程安全。 所以这中模式是最安全的。

范例代码上传至 gitee

测试代码链接地址

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值