单例模式(Singleton)

单例模式的作用:只创建一个类的实例。
有时候,在程序设计中,我们只想产生一个类的实例,那么只用调用一次new MyClass(),就可以达到目的。但是,如果我们不想“必须多加注意才能确保生成一个实例”,而是要达到如下目的时:
1、想确保任何情况下都绝对只有1个实例。
2、想在程序上表现出“只存在一个实例”。
像这样的确保只生成一个实例的模式被称为单例模式Singleton。
示例代码如下:

#include<iostream>
using namespace std;

//单例模式

//构造函数私有化
//提供一个全局的静态变量方法
//在类中定义一个全局的指针


class Singelton
{
private:
    Singelton()//构造函数私有化
    {
    }

public:
    static Singelton* GetSingelton()//提供一个全局的访问点
    {
        /*
        //此写法不能保证单例,必须加上判断
        return new Singelton();
        */

        if(singel==NULL)
        {//每一次都需要判断该单例是否存在?

            singel=new Singelton();
        }

        return singel;
    }


private:
    static Singelton* singel;
};

Singelton*  Singelton::singel=NULL;//在类外对类中的数据成员进行初始化


int main()
{
    //目的:不希望客户调用构造函数;不希望客户构造两个同类型的对象,防止资源浪费。
    //Singelton* p1=new Singelton;//出错,构造函数已经私有化。
    //Singelton* p2=new Singelton;

    Singelton* p1=Singelton::GetSingelton();
    Singelton* p2=Singelton::GetSingelton();

    if(p1==p2)
    {
        cout<<"p1==p2"<<endl;
    }
    else
    {
        cout<<"p1!=p2"<<endl;
    }

    return 0;
}

//分析
 //此模式为典型的懒汉模式,因为只有在GetSingelton()这个函数被调用时,
 //才会new一个单例。

//缺点:new时才会调用构造函数,C++的构造函数不是线程安全的。

执行上述程序,运行结果如下图所示:
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值