有时候我们需要某个类只能被实例化一次,并且其他类都可以访问到这个类,就需要这种设计模式。
例如我们想要做个资源管理器,显然这个管理器只能有一个。
这种模式有很多实现方式,这里介绍最简单的一种,想要了解更多可以移步:传送门
为了防止被多次实例化,我们将构造函数用private
修饰。然后用一个静态函数进行实例化,并且用一个静态数据指针保存实例化的对象,访问的时候如果发现没有实例化就进行实例化,如果已经实例化了通过静态的指针访问实例化的成员。具体看代码:
class A
{
private:
A(){}
A(A& x)=delete;//表示函数不能再调用,否则就会出错。
A& operator=(const A&)=delete;
static A* p;
public:
~A(){}
static A* GetA()
{
if(p==NULL) p=new A;
return p;
}
static void DelA()
{
delete p;
p=nullptr;
}
void use(){}
};
A* A::p=nullptr;