單例模式是應用很廣泛的一種設計模式,當需要某個類在整個工程中只有乙個例項的時候,就需要用到單例模式了。實現思路也不難。首先,將建構函式設定為私有(private)許可權,這樣就不允許外部建立例項了。然後,內部建立乙個例項,再通過乙個介面的getinstance(),將其設定為公開(public)許可權的靜態(static)特性,外部就可以通過這個介面來訪問類了。
主要**如下:
class singleton
;singleton* singleton::m_instance = null;
singleton::singleton()
singleton* singleton::getinstance()
return m_instance;
}void singleton::function()
此時想訪問類中的function()函式就可以通過getinstance()來訪問,
singleton::getinstance()->function();
由於這種方式是等第一次使用的時候才去例項化,所以也成為懶漢模式。但是上面的寫法在多執行緒的時候會有問題,兩個執行緒能建立出兩個例項。所以還需改善。
改善方法是用加鎖來控制。假設我們已寫好某個鎖,lock()和unlock(); 那麼需要在建立例項的時候用鎖來鎖定
**如下;
singleton* singleton::getinstance()
unlock();
}return m_instance;
}
此處為什麼需要兩次判斷呢?因為如果不用第乙個判斷,那麼會影響效能,如果很多個執行緒的話會造成大量執行緒的阻塞。而用兩個判斷能有效避免這種情況。
除此外還有另一種方法能解決多執行緒下的問題,那就是用餓漢模式
這種方法很簡單,就是在初始化的時候就建立例項。
**如下:
singleton* singleton::m_instance = new singleton;
這樣永遠都會只有乙個例項。 設計模式 C 實現單例模式
class singleton singleton singleton sing null singleton singleton getinstance 單例模式的實現要點 1 首先要將類的建構函式 複製建構函式和過載的賦值操作符設定為私有方法private,這樣禁止使用者呼叫建構函式來建立物件,...
設計模式 單例模式 C 實現
定義 指乙個類只有乙個例項,且該類能自行建立這個例項的一種模式。特點 1.單例類只有乙個例項物件 2.該單例物件必須由單例類自行建立 3.單例類對外提供乙個訪問該單例類的全域性訪問點。結構 單例類的建構函式往往是私有的。第一種 懶漢式單例 這種模式特點是類載入時沒有生成單例,只有當第一次呼叫geti...
C 設計模式之單例模式
在遊戲開發過程中,我們時常會遇到單例模式的運用場景。比如你遊戲當中的最終boss,你希望你的boss只能有乙個,所以這裡你就可以用單例模式 那麼什麼是單例模式呢?看下面的 分析。include include using namespace std class singleton public st...