Meyer 的Singleton 實作以靜態Singleton& instance() 的形式呈現,引發了有關其單例功能的問題。
單例本質源自於來自 static 關鍵字。局部變數的靜態儲存持續時間意味著整個程式中僅存在一個實例。
考慮以下等效偽代碼(不是實際的C 98 代碼):
static bool __guard = false; static char __storage[sizeof(Singleton)]; Singleton& Instance() { if (!__guard ) { __guard = true; new (__storage) Singleton(); } return *reinterpret_cast<Singleton*&>(__storage); }
這大致封裝了原始代碼的行為
在實際的C 11 實作中,每個執行緒都使用一個保護變數靜態,充當執行緒的屏障。
兩種實作都強制單例完整性,但在執行緒處理和程式碼複雜度方面有所不同。
邁耶的實作:
維基百科實作:
以上是Meyer 的單例實作真的是單例嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!