• c++设计模式:单例模式


    1.设计思想:

      单例模式,顾名思义,即一个类只有一个实例对象。C++一般的方法是将构造函数、拷贝构造函数以及赋值操作符函数声明为private级别,从而阻止用户实例化一个类。那么,如何才能获得该类的对象呢?这时,需要类提供一个public&static的方法,通过该方法获得这个类唯一的一个实例化对象。这就是单例模式基本的一个思想。

    2.分类:

      1).懒汉式:用的时候才加载,在类的public,getInstance方法中创建对象,场景就是可能有不用的情况,需要通过手动加锁实现线程安全。

      2).饿汉式:该实例对象需要存储在内存的全局数据区,故使用static修饰,程序开始时,全局变量就会初始化。场景就是肯定会实例化,本身就是线程安全。

     1.经典懒汉模式:(new)

    class singleton
    {
    protected:
        singleton()
        {
            pthread_mutex_init(&mutex);
        }
    private:
        static singleton* p;
    public:
        static pthread_mutex_t mutex;
        static singleton* initance();
    };
    
    pthread_mutex_t singleton::mutex;
    singleton* singleton::p = NULL;
    singleton* singleton::initance()
    {
        if (p == NULL)
        {
            pthread_mutex_lock(&mutex);
            if (p == NULL)
                p = new singleton();
            pthread_mutex_unlock(&mutex);
        }
        return p;
    }

    2.懒汉模式(静态变量)

    class singleton
    {
    protected:
        singleton()
        {
            pthread_mutex_init(&mutex);
        }
    public:
        static pthread_mutex_t mutex;
        static singleton* initance();
        int a;
    };
    
    pthread_mutex_t singleton::mutex;
    singleton* singleton::initance()
    {
        pthread_mutex_lock(&mutex);
        static singleton obj;
        pthread_mutex_unlock(&mutex);
        return &obj;
    }

    3.饿汉模式

    class singleton
    {
    protected:
        singleton()
        {}
    private:
        static singleton* p;
    public:
        static singleton* initance();
    };
    singleton* singleton::p = new singleton;
    singleton* singleton::initance()
    {
        return p;
    }

      

  • 相关阅读:
    codeforces 1295 题解(完结)
    Leetcode 第 173 场周赛 题解(完结)
    P2564-[USACO12MAR]花盆Flowerpot
    Task 1-2
    LeetCode--169--多数元素(python)
    049字符异位词分组(python)
    矩阵路径(python)
    全排列
    滑动窗口最大值leetcode & nowcoder(python)
    取topK
  • 原文地址:https://www.cnblogs.com/mcy0808/p/10831575.html
Copyright © 2020-2023  润新知