• 单例模型 懒汉 饿汉


    单例模型

    饿汉模式:

    #include <iostream>

    using namespace std;

    class A
    {
    public:
        static A& instance()
        {
            struct B
            {
                A a;
                B()
                {
                    a.show();
                }
            };
            static B b;
            return b.a;
        }
        void show()
        {
            cout << "hello" << endl;
        }
    private:
        A(){}
    };

    int main()
    {
        cout << "sdf" << endl;
        A &m = A::instance();
        return 0;
    }

    懒汉模式:

    #include <iostream>
    
    using namespace std;
    
    class A
    {
    public:
        static A* instance()
        {
            if (a == NULL)
            {
                a = new A;
                a->show();
            }
    
            return a;
        }
        void show()
        {
            cout << "hello" << endl;
        }
    private:
        static A *a;
        A(){}
    };
    A * A::a = NULL;
    
    int main()
    {
        cout << "sdf" << endl;
        A *m = A::instance();
        return 0;
    }
    单例中懒汉和饿汉的本质区别在于以下几点:

      1、饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变。懒汉式如果在创建实例对象时不加上同步安全控制则会导致对对象的访问不是线程安全的

      2、从实现方式来讲他们最大的区别就是懒汉式是延时加载,它是在需要的时候才创建对象,而饿汉式在程序启动的时候就会创建,饿汉式无需关注多线程问题、写法简单明了、能用则用。但是它是加载类时创建实例。所以如果是一个工厂模式、缓存了很多实例、那么就得考虑效率问题,因为这个类一加载则把所有实例不管用不用一块创建。
  • 相关阅读:
    linux中的中断处理框架
    linux中的异常处理流程
    如何使用次设备号控制多个LED
    装载内核模块时,自动添加设备文件
    第一个字符设备驱动程序
    网络文件系统
    点击全选或全不选,一个页面有多个全选和全不选的时候
    ubuntu 20.04 遇到的问题
    Ubuntu20.04 初始没有的东西
    Ubuntu 20 安装pycharm备忘
  • 原文地址:https://www.cnblogs.com/jiu0821/p/5754584.html
Copyright © 2020-2023  润新知