单例模式之饿汉,懒汉

一,单例模式

单例模式是设计模式中的一种,本文主要介绍单例模式。

单例模式核心:一个类只能创建一个对象,保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。

事例:在某个服务器中,该服务器的配置信息放在一个文件,这些数据必须由一个单例对象读取,其他对象通过这个单例对象过去配置,这样设计的话,节约了大量时间。

单例之饿汉模式:

    直接上代码:

#include<iostream>
class Singleton
{
  public:
    static Singleton *GetInstance()
    {
      return &m_instance;
    }
  private:
    //构造函数私有
    Singleton ();
    //拷贝构造函数私有,防拷贝
    Singleton (const Singleton &);
    Singleton& operator=(const Singleton&);
    //初始化,必须为static
    static Singleton m_instance;
};
Singleton Singleton::m_instance;
int main()
{
  return 0;
}

优点:设计简单

缺点:每次登陆都要初始化,耗费时间,资源竞争高,速度慢

单例之懒汉模式:

#include<iostream>
#include<mutex>
using namespace std;
class Singleton
{
  public:
    static Singleton *GetInstance()
    {
        if(m_Pinstance == nullptr)
        {
          //防止重复加锁(例如:多线程)
          m_mtx.lock();
          if(nullptr == m_Pinstance)
          {
              m_Pinstance = new Singleton;
          }
          m_mtx.unlock();
        }
        return m_Pinstance;
    }
    //回收类,类类型的好处是,它是Singleton 的友元类,可以访问外部类,而外部类不能访问它。
    class CGarbo{
      public:
            ~CGarbo()
            {
              if(Singleton::m_Pinstance)
              {
                delete Singleton::m_Pinstance;
              }
            }
    };
    //定义一个静态成员变量,程序结束时,系统会自动调用它的析构函数从而释放单例对象
            static CGarbo Garbo;
  private:
            //构造函数私有,所以只能调一次构造函数
    Singleton ();
    //防止构造拷贝
    Singleton operator=(const Singleton&);
    static Singleton *m_Pinstance;
    static mutex m_mtx;
};
Singleton* Singleton::m_Pinstance = nullptr;
Singleton:: CGarbo Garbo;
mutex Singleton::m_mtx;
int main()
{
  return 0;
}

优点:就是饿汉的缺点。

重点:饿汉每次都要初始化,而懒汉指初始化一次

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值