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

单例模式——c++

一个类,只能有1个对象        (对象在堆空间)
再次创建该对象,直接引用之前的对象

so构造函数不能随意调用
so构造函数私有
so对象不能构造

如何调用私有化的构造函数:
公开接口调用构造函数

调用构造函数:singleTon instance;
但return instance 之后,产生拷贝构造,就不单例了
so删除拷贝构造函数:        singleTon(const singleTon& r) = delete;

不能返回引用,因为构造的是局部变量
    
构造函数用 new 调用

调用构造函数之前,判断一下是否存在唯一对象:
static singleTon* instance = NULL;
if(instance == NULL){
    instance = new singleTon();
}

class singleTon{
private:
    singleTon(){}
public:
    singleTon(const singleTon& r) = delete; // 删除拷贝构造函数
    static singleTon* getInstance(){
        static singleTon* instance = NULL;
        if(instance == NULL){
            sleep(1);
            instance = new singleTon();
        }
        return instance;
    }                                                                  
};
int main(int argc,const char** argv){
    singleTon* s1 = singleTon::getInstance();
    singleTon* s2 = singleTon::getInstance();
    cout << s1 << endl;
    cout << s2 << endl;
}

getIntance 就是构造函数,创建对象用的
有内部的逻辑处理:无论如何创建对象,创建多少个对象,所有对象永远是同一个 

懒汉单例模式

仅当要用单例,才会创建单例对象(上面就是)

多线程不安全

懒汉:催一下工作一下,催一下工作一下

饿汉单例模式

不管单例对象用不用,反正先申请

多线程安全

饿汉吃放,对于食物不管是否吃得下,不管吃不吃,反正都要摆在面前

懒汉单例和饿汉单例的优缺点

懒汉:
缺点:

  • 多线程不安全 
  • 逻辑比较复杂

优点:

  • 节省空间
  • 允许随时删除,随时构造

饿汉:
优点:

  • 多线程安全
  • 逻辑非常简单

缺点:

  • 消耗空间
  • 在程序结束之前,绝对不允许销毁对象

相关文章:

  • JavaScript将:;隔开的字符串转换为json格式。使用正则表达式匹配键值对,并构建对象。多用于解析cssText为style Object对象
  • 基础知识|原型在什么时候用和类的区别
  • 机试刷题_HJ14 字符串排序【python】
  • CSS盒子模型
  • 算法每日一练 (6)
  • Python 类(创建和使用类)
  • 自然语言处理:初识自然语言处理
  • SQL基本知识
  • 代码随想录二刷|动态规划11
  • 最新版本SpringAI接入DeepSeek大模型,并集成Mybatis
  • Linux系统里怎么怎么截图
  • 低代码与开发框架的一些整合[3]
  • 超大规模分类(四):Partial FC
  • ReentrantLock 底层实现
  • 【git】【reset全解】Git 回到上次提交并处理提交内容的不同方式
  • AI智能体与大语言模型:重塑SaaS系统的未来航向
  • HTML篇
  • 区块链仿真工具SimBlock使用
  • PDF处理控件Aspose.PDF教程:使用 Python 将 PDF 转换为 TIFF
  • 【Spring】统一功能处理
  • 马新民卸任外交部条约法律司司长
  • 公募基金改革八大要点:建立浮动管理费收取机制、降低规模排名考核权重
  • 两国战机均未侵入对方领空,巴方公布对印回击细节
  • 长三角多地重启游轮跨市游,“恢复苏杭夜航船”呼声又起
  • 上海乐高乐园度假区将于7月5日开园
  • 文旅部:加强对景区索道、游船等设施设备安全隐患排查整治