91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

c++單例模式怎么實現

c++
小億
100
2023-10-13 10:12:07
欄目: 編程語言

在C++中,可以通過以下幾種方式來實現單例模式:

  1. 餓漢式(Eager Initialization):
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 私有構造函數,防止類外實例化對象
public:
static Singleton* getInstance() {
return instance;
}
};
Singleton* Singleton::instance = new Singleton();

在該實現方式中,單例對象在程序啟動時就被創建出來,因此稱為“餓漢式”。在調用getInstance()方法時,直接返回已創建好的實例。

  1. 懶漢式(Lazy Initialization):
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 私有構造函數,防止類外實例化對象
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;

在該實現方式中,單例對象在第一次調用getInstance()方法時才被創建出來,因此稱為“懶漢式”。通過判斷instance是否為nullptr,來判斷是否已經創建實例,如果是則創建實例,如果不是則直接返回實例。

  1. 雙檢鎖(Double-Checked Locking):
class Singleton {
private:
static Singleton* instance;
static std::mutex mtx;
Singleton() {} // 私有構造函數,防止類外實例化對象
public:
static Singleton* getInstance() {
if (instance == nullptr) {
std::lock_guard<std::mutex> lock(mtx);
if (instance == nullptr) {
instance = new Singleton();
}
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;

在該實現方式中,通過使用雙重檢查鎖定來保證線程安全。首先判斷instance是否為nullptr,如果是則加鎖,再次判斷instance是否為nullptr,如果是則創建實例。通過使用std::mutex來實現線程同步。

以上是幾種常見的單例模式實現方式,具體選擇哪種方式取決于實際需求和場景。

0
云和县| 中山市| 墨玉县| 阳曲县| 抚顺市| 丰原市| 咸宁市| 城固县| 依兰县| 莒南县| 甘肃省| 金溪县| 昭觉县| SHOW| 崇义县| 双流县| 日土县| 吉林市| 克东县| 漠河县| 万荣县| 黑山县| 晋城| 黎城县| 张掖市| 油尖旺区| 荃湾区| 乐都县| 汨罗市| 湘潭市| 东港市| 临高县| 古蔺县| 兰溪市| 资讯| 交城县| 白玉县| 闸北区| 遂平县| 海原县| 伊金霍洛旗|