getInstance()的用法

 

GetInstance()的用法

      在写程序库代码时,有时有一个类需要被所有的其它类使用,但又要求这个类只能实例化一次,是个服务类,定义一次,其它类使用同一个这个类的实例。

例如:

class A

{

public:

       A(void);

…..

}

如果在每一个需要A的类中都声明一个A类的对象,那么会导致有N个类,每A类的定义都不一样,但是这个A类是服务类,只能定义一次,定义多个N类会导致不同的内存地址。

解决这个矛盾的方法:

1.      定义一个A的全局类对象,其它类共同使用这个实例化对象,这样保证A只实例化一次,使用extern A a声明一次,在源文件中定义A a即可;

但这种方式有一个问题,就是工程之间的访问,例如pro1中有A类,pro2需要使用A类,这样就不能完全保证A类只实例化一次,可能会出现pro1和pro2各实例化一次。

2.      定义静态的实例化类(Singleton),如下:

class A

{

public:

A(void);

static A* GetInstance()

{

static A* a = NULL;

if(!a)

{

 a = new A;

};

return a;

}

……

}

 

这样只要包含这个头文件,

A::GetInstance()->…..

这样就保证只实例化一次。

你可能感兴趣的:(class)