C++中的單例模式設計

      有時也許我們會遇到這樣的狀況:創建一個類,但只想讓這個類實例化一個對象,那麼應該怎麼辦呢?這就是c++中的單例設計模式。我是今天讀書時看到這樣一種奇怪的設計模式,作爲一種學習方式,我決定把它寫成一篇短博來鞏固我的記憶。

      先淺談一下做法和原理:首先我們要把這個類的構造函數聲明爲私有的或者受保護的,這樣就不能隨便在別的函數或線程中實例化這個類的對象了。接着還要聲明兩個靜態成員。一個是靜態的同類共享指針,類型是本類,並且要在外面把它初始化爲null;另一個是靜態函數,它可以是公有的,因爲要把這個函數當成一個“構造函數”,在這個函數裏面檢測那個靜態指針是否是null,如果是,表示這個類還沒有實例化過對象,那麼接下來應該實例化一個對象並返還,如果不是null,則表示這個類曾經實例化過對象,那麼直接返回對象的地址就行了。

      示例代碼如下:

#include <iostream>
using namespace std;

class Singleton
{
public:
	static Singleton * GetInstance()//這個其實是我們穿馬甲的“構造函數”,前面的static是必不可少的
	{
		if (NULL == m_pInstance)//如果還沒有實例化過該類的對象
		{
			m_pInstance = new Singleton();
		}
		return m_pInstance;
	}

protected:
	Singleton()//將構造函數設置成受保護的
	{ }
private:
	static Singleton * m_pInstance;//這個變量必須是靜態共享的
};

Singleton * Singleton::m_pInstance = nullptr;//必須在外面將靜態變量初始化

int main()
{
	Singleton * p = Singleton::GetInstance();//創建一個該類的對象
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章