17.C++設計模式-單例

#include <iostream>
using namespace std;
#include <mutex>
/*
    懶漢式
*/
class SingleTon {
private:
    SingleTon() {
        
    }
private:
    static SingleTon* ton;
    static int count;
    static mutex mu;
public:
    static SingleTon* getInstance() {
        if (ton == NULL) {
            mu.lock();
            if (ton == NULL)
            {
                ton = new SingleTon;
            }
            mu.unlock();
        }
        return ton;
    }

    void add() {
        count++;
        cout<<count<<endl;
    }


};
//靜態(tài)變量的初始化放在類的外部
//?因為類定義的時候并沒有分配內存,靜態(tài)變量也不能等到創(chuàng)建對象的時候才分配內存,必須提前分配
SingleTon* SingleTon::ton = NULL;
int SingleTon::count = 1;
mutex SingleTon::mu;


/////////////////////////////////////////////////////////////////////////////////

/*
    餓漢式
*/
class SingleTon2 {
private:
    SingleTon2() {
    }
private:
    static SingleTon2* ton;
    static int count;
public:
    static SingleTon2* getInstance() {
        return ton;
    }

    void add() {
        count++;
        cout << count << endl;
    }


};
//靜態(tài)變量的初始化放在類的外部
//?因為類定義的時候并沒有分配內存,靜態(tài)變量也不能等到創(chuàng)建對象的時候才分配內存,必須提前分配
SingleTon2* SingleTon2::ton = new SingleTon2;
int SingleTon2::count = 1;

void main() {

    SingleTon* s = SingleTon::getInstance();
    s->add();
    SingleTon* s1 = SingleTon::getInstance();
    s1->add();


    SingleTon2* s3 = SingleTon2::getInstance();
    s3->add();
    SingleTon2* s4 = SingleTon2::getInstance();
    s4->add();

    system("pause");
}
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容