有時候我們需要某個類只能被實例化一次,并且其他類都可以訪問到這個類,就需要這種設計模式。
例如我們想要做個資源管理器,顯然這個管理器只能有一個。
這種模式有很多實現方式,這里介紹最簡單的一種,想要了解更多可以移步:傳送門
為了防止被多次實例化,我們將構造函數用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;