有时候我们需要某个类只能被实例化一次,并且其他类都可以访问到这个类,就需要这种设计模式。
例如我们想要做个资源管理器,显然这个管理器只能有一个。
这种模式有很多实现方式,这里介绍最简单的一种,想要了解更多可以移步:传送门
为了防止被多次实例化,我们将构造函数用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;