单例模式

单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。
当例模式一般分为两种,一种是饿汉式单例,采取静态初始化的方式,它是由类一加载就实例化的对象,所以要提前占用系统资源。

class final Singleton
{
    private:
            Singleton(){};//构造函数声明为private,让外界无法利用new创建实例。
            static Singleton singleton;
    public:
        Singleton* GetInstance()
        {
            return singleton;
        }
}

饿汉式单例模式采用的是用空间换时间的方式。
另外一种是懒汉式单例:

class Singleton
{
    private:
        static Singleton *instance;
        Singleton(){};
    public:
        static Singleton *GetInstance()
        {
            if(instance==NULL)
                instance=new Singleton();
            return instance;
        }
}

懒汉式单例除了可以生成唯一实例之外,还可以严格的控制客户怎样访问以及何时访问,是一种用时间换空间的方式。
懒汉式单例模式无法保证线程安全性,调用GetInstance()可能生成多个实例。因此在多线程中需要进行加锁保护。

class Singleton  
{  
private:  
    static Singleton* m_instance;  
    Singleton(){}  
public:  
    static Singleton* getInstance();  
};  

Singleton* Singleton::getInstance()  
{  
    if(NULL == m_instance)  
    {  
        lock();  
        if(NULL == m_instance)  
        {  
            m_instance = new Singleton;  
        }  
        unlock();  
    }  
    return m_instance;  
}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值