您现在的位置是:首页 > 编程语言 > 其他编程其他编程

三种单例模式的实现(C++)

2021-06-07 21:02:59其他编程人已围观

简介今天主要是学习了单例模式的三种实现,包括懒汉式、双重检查锁懒汉式和饿汉式。 首先,我们应该要理解单例模式的概念,单例模式简单的来说就是一个类只允许有一个对象,为此,我们可以知道必须要控制类的构造行为,

  今天主要是学习了单例模式的三种实现,包括懒汉式、双重检查锁懒汉式和饿汉式。

  首先,我们应该要理解单例模式的概念,单例模式简单的来说就是一个类只允许有一个对象,为此,我们可以知道必须要控制类的构造行为,故将构造函数私有化、同时将该类的对象

定义为该类的静态数据成员(因为构造函数被私有化了)。

  1.   首先是懒汉式,懒汉式理解起来最为直接,直接上代码

  

#include "commonHeader.h"

class lanhan {
public:
    static lanhan * getInstance()
    {
        if (nullptr == instance)
        {
            instance = new lanhan();
        }
        return instance;
    }
private:
    lanhan()
    {

    }
    static lanhan * instance;
};

lanhan * lanhan::instance = nullptr;

  通过每次去判断instance是否为空,从而保证instace只会被初始化一次,但是这种保证只在单线程的情况下成立,当多个线程都对instace==nullptr进行判断时,instance无疑

还是会被执行多次。

  2. 考虑到懒汉式在多线程下存在的问题,于是也有人提出了使用互斥锁来保证这一点,代码如下:

  

#include <mutex>
#include "commonHeader.h"

class lanhanPlus
{
public:
    static lanhanPlus * getInstance()
    {
        if (nullptr == instance)
        {
            helpLock.lock();
            if (nullptr == instance)
            {
                instance = new lanhanPlus();
            }
            helpLock.unlock();
        }
        return instance;
    }
private:
    lanhanPlus()
    {

    }
    static lanhanPlus * instance;
    static mutex helpLock;
};

lanhanPlus * lanhanPlus::instance = nullptr;
mutex lanhanPlus::helpLock;

  通过借助互斥锁的帮助,懒汉式在多线程环境下也能保证类达到单例的要求。同时这里通过两层判空的设定,不会对程序的性能造成太多的影响。

  3. 饿汉式,饿汉式非常巧妙的借助了静态局部变量的特性,存储在静态区,作用域局部,只会在第一次定义时被初始化,非常完美,代码如下:

  

#include "commonHeader.h"

class ehan
{
public:
    static ehan * getInstance()
    {
        static ehan * instance;
        return instance;
    }
private:
    ehan()
    {

    }
};

文章来源:https://www.cnblogs.com/JsonZhangAA/p/14852209.html

Tags:三种 模式 

很赞哦! ()

随机图文

文章评论

留言与评论(共有 0 条评论)
   
验证码:

本栏推荐

站点信息

  • 文章统计247968篇文章
  • 浏览统计18356次浏览
  • 评论统计1个评论
  • 标签管理标签云
  • 统计数据:统计代码
  • 微信公众号:扫描二维码,关注我们