0、核心要素
// 構造、析構函數私有化(一個進程只允許一個對象存在)
// 對象私有化、靜態化(因為接口靜態函數)
// 對象調用接口靜態化(因為靜態函數脫離了類對象,可以直接調用)
一、懶漢
唯一的對象在使用時才進行初始化。存在多線程問題。
#include <iostream>using namespace std;class singleMode {public:static singleMode* getInstance() {if (obj==nullptr) {obj = new singleMode();}return obj;}void printMsg() {cout << "print success." << endl;}private:static singleMode* obj;singleMode() {cout << "instance create." << endl;}~singleMode() {cout << "instance release." << endl;}
};singleMode* singleMode::obj = nullptr;
// singleMode* singleMode::obj = new singleMode();int main()
{{singleMode::getInstance()->printMsg();}return 0;
}
二、餓漢
唯一的對象在定義時就完成初始化。
#include <iostream>using namespace std;class singleMode {public:static singleMode* getInstance() {/* if (obj==nullptr) {obj = new singleMode();}*/return obj;}void printMsg() {cout << "print success." << endl;}private:static singleMode* obj;singleMode() {cout << "instance create." << endl;}~singleMode() {cout << "instance release." << endl;}
};// singleMode* singleMode::obj = nullptr;
singleMode* singleMode::obj = new singleMode();int main()
{{singleMode::getInstance()->printMsg();}return 0;
}