C++单例模式

简单单例模式的使用

一共有两点:

1. 构造函数必须是private的,如果不是private的,外部对象就可以创建,就可以多个,即不属于单例模式。单例模式要求必须一个。

2. 类必须提供至少一个static的方法,用于对外创建自身的唯一对象。(本身控制,判断指针是否为空,为空创建,不为空则不创建,体现在唯一上。)

简单总结:构造函数private + 方法static + 保唯一

 

单例模式的好处是唯一,避免内存、连接等资源的浪费,比如配置文件,就一份,可共享。

 

举例:

int Init()
{
m_pAppCfg = StAppConfig::getInstance();
if (NULL == m_pAppCfg)
{
return -1;
}

return 0;
}

class StAppConfig

{

public:

    static StAppConfig * getInstance()

    {

           if (NULL == m_pCfg)

           {

                  //指向自身对象,目的仅创建一次对象,即单例模式。

       m_pCfg = new StAppConfig ();

           }

    //返回指向自身的一个指针,返回创建的单例模式的地址

    return m_pCfg;

    }

private:

    StAppConfig():m_pCfg(NULL){};

    StAppConfig * m_pCfg;
}

 

变量初始化的方式有两种:

int i=0;

int i;

i=0;

 

StAppConfig tmp1;  x错误 。  

StAppConfig tmp2;  x错误 。

 

因为创建对象的时候,一定会调用构造函数。 不论是缺省的还是自实现的,一定要调用。

又因为构造函数是私有的,所以不能创建对象(实例),没有实例就不能调用类中的普通方法(非static方法)

加上static后,就变成了全局类方法。可以通过以下两种方法进行使用。

1. 类名+::+ static方法 [必须是static的]

2. 对象.或->static方法 [一般使用方式1]

 

StAppConfig * tmp1=StAppConfig:: getInstance() ; //对象的指针变量

StAppConfig * tmp2=StAppConfig:: getInstance() ;

 这种做法正确。 指针是地址的指向,并没有创建对象。真正的创建对象是getInstance来创建的。

为什么getInstance可以创建?

答:

类成员方法,只能对象来调。

 

引用是别名的概念,引用必须指向同一种类型,并且只能赋值一次。

指针是同类型之间任意变量指向。

C++单例模式,布布扣,bubuko.com

C++单例模式

上一篇:linux中的线程同步:生产者、消费者问题


下一篇:Javascript 获取dom的宽度 随笔一