**懶漢式構造單例類**
懶漢式,指的就是需要時再構造(延遲構造),在效率上會優於餓漢式,因為餓漢式在進入 main 之前就要構造,懶漢式不用。
基本特點是:執行緒不安全
基本模板(加鎖):
#include #define rep( i , j , n ) for ( int i = int(j) ; i < int(n) ; ++i )
#define dew( i , j , n ) for ( int i = int(n-1) ; i > int(j) ; --i )
#define _path __file__ , __line__
typedef std::pair < int , int > p ;
using std::cin ;
using std::cout ;
using std::endl ;
using std::string ;
class entity final
mymutex.unlock() ;
} return null ;
}private:
// 建構函式設為 private
explicit entity() = default ;
~entity() noexcept = default ;
entity(const entity &) = delete ;
entity& operator=(const entity &) = delete ;
entity& operator=(const entity &&) = delete ;
class litter
} ;private:
static entity *null ;
// gc 清理類
static litter litter ;
// 設定一把鎖
static std::mutex mymutex ;
} ;entity* entity::null ;
entity::litter entity::litter ;
std::mutex entity::mymutex ;
int main ()
優點:雙檢鎖,保證了執行緒安全;兩次判斷是否為 nullptr, 避免多次加鎖解鎖。
缺點:頻繁的加解鎖操作,損失了效能。
兩種單例模式的分析比較參考:單例模式的分析
2018.8.3
c++11 的 std::call_once 和 std::once_flag 搭配使用,可以保證在多個執行緒中,只構造一次,具體實現如下:
static entity *getinstance() ) ;
if ( null == nullptr )
throw std::bad_alloc() ;
} catch ( std::exception &e )
return null ;
}
程式執行結果:
1 設計模式學習之單例設計模式
一 什麼是單例設計模式?二 為什麼要使用單例設計模式?三 如何實現單例設計模式?缺點 2 懶漢式 public class mgr02 public static mgr02 getinstance return instance 缺點 3 synchronized修飾方法的寫法。解決懶漢式的執行緒...
設計模式 單例模式 懶載入
這篇文章總結幾種比較常用的設計模式,不懂得設計模式。怎麼敢稱熟悉oop思想。單例模式的核心結構中只包含乙個被稱為單例類的特殊類,通過單例模式可以保證系統中乙個類只有乙個例項 由於快載入單例模式是執行緒安全的,所以本文只討論懶載入單例模式的執行緒安全問題 版本一 使用懶載入 快載入 程式呼叫時再分配記...
設計模式之單例模式,學習筆記
所謂的單例模式就是說乙個物件,我們只去例項化一次,在頁面中如果有乙個物件是唯一的,那麼就可以用單例模式。var fn function name fn.prototype.getname function fn.getinstrace function var a fn.getinstrace js...