懶漢模式和餓漢模式

ponder776發表於2024-05-09

懶漢模式(Lazy Initialization)和餓漢模式(Eager Initialization)是兩種常見的單例模式實現方式,它們的區別主要在於物件的初始化時機。

1. **懶漢模式**:
- 懶漢模式是指在第一次使用物件時才進行初始化。
- 在懶漢模式中,單例物件在第一次被使用時建立,因此也被稱為延遲載入。
- 懶漢模式通常在多執行緒環境下需要考慮執行緒安全問題,因為多個執行緒可能同時檢測到單例物件尚未被建立,從而導致建立多個例項的情況發生。

  可以使用std::call_once在多執行緒避免被多個執行緒同時建立物件。
- 懶漢模式的優點是在程式啟動時不會佔用額外的系統資源,只有在需要時才會進行物件的初始化。

2. **餓漢模式**:
- 餓漢模式是指在類載入時就進行物件的建立和初始化。
- 在餓漢模式中,單例物件在程式啟動時就被建立,並且在整個程式生命週期中都保持不變。
- 餓漢模式不需要考慮多執行緒環境下的執行緒安全問題,因為單例物件在類載入時就已經被建立,不會存在併發訪問的情況。
- 餓漢模式的缺點是在程式啟動時就會佔用一定的系統資源,可能會導致啟動時間較長。

總的來說,懶漢模式適用於單例物件初始化成本較高,且不是在每次程式啟動時都需要使用的情況;而餓漢模式適用於單例物件初始化成本較低,且在程式執行期間始終需要使用的情況。

相關文章