单例模式懒汉模式,饿汉模式

  1. 饿汉模式: 类加载的时候就已经实例化,并且创建单例对象,以后只管用即可。 天然多线程安全, 不需要时,也要占用资源(static 不占内存)
class Sigleton{
private:
      Sigleton(){ std::cout << "Sigleton construct" << std::endl;}

public: 
      Sigleton(const Sigleton&) = delete;
      Sigleton& operator=(const Sigleton&) = delete;
      static Sigleton& getInstance()
      {
          static Sigleton s;
          return s;
      }
};
  1. 懒汉模式: 需要时再加载,存在多线程安全问题, 最简单实现:
#include <iostream>
#include <memory>
#include <mutex>

class signleton{
private:
    signleton(){ std::cout << "Sigleton construct" << std::endl;}
    signleton (const signleton&) = delete;
    signleton& operator=(const signleton&) = delete;
public:
    static std::unique_ptr<signleton> _ptr;

    static signleton& getInstance()
    {
        static std::once_flag flag;
        std::cout << "getInstance" << std::endl;
        std::call_once(flag, [&](){_ptr.reset(new signleton);});
        return *_ptr;
    }
 };

std::unique_ptr<signleton> signleton::_ptr;

int main(){
    std::cout << "sigletonbaseonlazy" << std::endl;
    signleton& s1 = signleton::getInstance();
    signleton& s2 = signleton::getInstance();
    return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值