懒汉模式和饿汉模式

懒汉模式(Lazy Initialization)和饿汉模式(Eager Initialization)是两种常见的单例模式实现方式,它们的区别主要在于对象的初始化时机。

1. **懒汉模式**:
- 懒汉模式是指在第一次使用对象时才进行初始化。
- 在懒汉模式中,单例对象在第一次被使用时创建,因此也被称为延迟加载。
- 懒汉模式通常在多线程环境下需要考虑线程安全问题,因为多个线程可能同时检测到单例对象尚未被创建,从而导致创建多个实例的情况发生。

  可以使用std::call_once在多线程避免被多个线程同时创建对象。
- 懒汉模式的优点是在程序启动时不会占用额外的系统资源,只有在需要时才会进行对象的初始化。

2. **饿汉模式**:
- 饿汉模式是指在类加载时就进行对象的创建和初始化。
- 在饿汉模式中,单例对象在程序启动时就被创建,并且在整个程序生命周期中都保持不变。
- 饿汉模式不需要考虑多线程环境下的线程安全问题,因为单例对象在类加载时就已经被创建,不会存在并发访问的情况。
- 饿汉模式的缺点是在程序启动时就会占用一定的系统资源,可能会导致启动时间较长。

总的来说,懒汉模式适用于单例对象初始化成本较高,且不是在每次程序启动时都需要使用的情况;而饿汉模式适用于单例对象初始化成本较低,且在程序运行期间始终需要使用的情况。

posted @   ponder776  阅读(191)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示