" />

欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)單例模式的方法

 更新時間:2021年12月17日 16:37:10   作者:tarespan  
這篇文章主要為大家介紹了C++實現(xiàn)單例模式的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

餓漢模式

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

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;
}

懶漢模式

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

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;
}

局部靜態(tài)變量

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語言中return返回函數局部變量的問題

    詳解C語言中return返回函數局部變量的問題

    本文主要介紹了C語言中return返回函數局部變量的問題,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C++類成員構造函數和析構函數順序示例詳細講解

    C++類成員構造函數和析構函數順序示例詳細講解

    這篇文章主要介紹了C++類成員構造和析構順序示例,看了這個例子大家就可以明白c++構造析構的奧秘
    2013-11-11
  • c語言常見圖片格式判斷實例

    c語言常見圖片格式判斷實例

    這篇文章介紹了c語言常見圖片格式判斷實例,有需要的朋友可以參考一下
    2013-09-09
  • C++構造函數和析構函數的使用與講解

    C++構造函數和析構函數的使用與講解

    今天小編就為大家分享一篇關于C++構造函數和析構函數的使用與講解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C語言實現(xiàn)掃雷附完整代碼

    C語言實現(xiàn)掃雷附完整代碼

    本文詳細講解了C語言實現(xiàn)掃雷并附完整代碼,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • 淺談c++ 字符類型總結區(qū)別wchar_t,char,WCHAR

    淺談c++ 字符類型總結區(qū)別wchar_t,char,WCHAR

    下面小編就為大家?guī)硪黄獪\談c++ 字符類型總結區(qū)別wchar_t,char,WCHAR。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • FFmpeg中avfilter模塊的介紹與使用

    FFmpeg中avfilter模塊的介紹與使用

    FFmpeg中的libavfilter模塊(或庫)用于filter(過濾器),?filter可以有多個輸入和多個輸出,下面就跟隨小編一起簡單學習一下它的巨日使用吧
    2023-08-08
  • Qt Quick Designer灰色或者禁用的解決

    Qt Quick Designer灰色或者禁用的解決

    本文主要介紹了Qt Quick Designer灰色或者禁用的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • C++實現(xiàn)迷宮算法實例解析

    C++實現(xiàn)迷宮算法實例解析

    這篇文章主要介紹了C++實現(xiàn)迷宮算法實例解析,是一個比較經典的C++算法,有一定的學習與借鑒價值,需要的朋友可以參考下
    2014-07-07
  • C語言:變量的作用域和生命周期詳解

    C語言:變量的作用域和生命周期詳解

    這篇文章主要介紹了C++作用域與生命周期的相關資料,幫助大家更好的理解和學習c++,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-08-08

最新評論