亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++實現單例模式的方法是什么

發布時間:2021-12-18 09:28:27 來源:億速云 閱讀:178 作者:柒染 欄目:開發技術

這篇文章將為大家詳細講解有關C++實現單例模式的方法是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

餓漢模式

類實例化就會占用內存,浪費資源,效率高,不存在線程安全問題。

class Singleton{
    Singleton() { }
    static Singleton* m_instance_ptr;
public:
    static Singleton* get_instance() {
        return m_instance_ptr;
	}
};
Singleton* Singleton::m_instance_ptr = new Singleton();
int main(){
    Singleton* instance1 = Singleton::get_instance();
    Singleton* instance2 = Singleton::get_instance();
    return 0;
}

懶漢模式

延遲加載,節省資源,效率低,存在線程安全問題。

class Singleton {
    Singleton() { }
    static Singleton* m_instance_ptr;
public:
    static Singleton* get_instance() {
        if(m_instance_ptr == nullptr)
			m_instance_ptr = new Singleton();
        return m_instance_ptr;
    }
};
Singleton* Singleton::m_instance_ptr = nullptr;
int main(){
    Singleton* instance1 = Singleton::get_instance();
    Singleton* instance2 = Singleton::get_instance();
    return 0;
}

鎖 + 智能指針

線程安全(鎖)+ 內存回收(智能指針)

#include <iostream>
#include <memory>
#include <mutex>
class Singleton {
public:
	typedef std::shared_ptr<Singleton> Ptr;
    static Ptr get_instance() {
        if(m_instance_ptr == nullptr) {
            std::lock_guard<std::mutex> lk(m_mutex);
            if(m_instance_ptr == nullptr)
				m_instance_ptr = std::shared_ptr<Singleton>(new Singleton);
        }
        return m_instance_ptr;
    }
private:
	Singleton() {}
    static Ptr m_instance_ptr;
    static std::mutex m_mutex;
};
Singleton::Ptr Singleton::m_instance_ptr = nullptr;
std::mutex Singleton::m_mutex;
int main(){
    Singleton::Ptr instance1 = Singleton::get_instance();
    Singleton::Ptr instance2 = Singleton::get_instance();
    return 0;
}

局部靜態變量

class Singleton {
public:
    Singleton(const Singleton&)=delete;
    static Singleton& get_instance() {
        static Singleton instance;
        return instance;
    }
private:
    Singleton() {}
};
int main() {
	Singleton& instance1 = Singleton::get_instance();
    Singleton& instance2 = Singleton::get_instance();
    return 0;
}

關于C++實現單例模式的方法是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

江油市| 名山县| 湖南省| 马关县| 周至县| 万安县| 丹阳市| 水富县| 太仆寺旗| 河源市| 故城县| 博兴县| 吉木萨尔县| 巫山县| 琼结县| 荃湾区| 天台县| 瑞安市| 新野县| 绥宁县| 青阳县| 定州市| 略阳县| 囊谦县| 贺州市| 武汉市| 黑龙江省| 衢州市| 渑池县| 兴安盟| 都匀市| 来凤县| 东乡族自治县| 南投市| 平湖市| 专栏| 金华市| 八宿县| 陵川县| 织金县| 巩留县|