C 設計者模式 單例模式

2021-10-04 06:46:02 字數 1503 閱讀 8655

單例用到鎖的定義實現:

mutex.h

#pragma once

#include#includeusing namespace std;

class imylock

virtual void lock() const = 0;

virtual void unlock() const = 0;

};class mutex:public imylock

;class clock

;

#include"mutex.h"

mutex::mutex()

mutex::~mutex()

void mutex::lock()const

void mutex::unlock()const

clock::clock(const imylock& m) :m_lock(m)

clock::~clock()

有三種方式實現單例:有單執行緒、和多執行緒安全的

#pragma once

#include#include"mutex.h"

using namespace std;

using std::_atomic_counter_t;

class singleton

singleton(const singleton& singleton)

private:

static singleton* m_lpsingleton;

static imylock * mutex;

};

#include"singleton.h"

singleton* singleton::m_lpsingleton = new singleton();

imylock* singleton::mutex = new mutex();

singleton* singleton::getstance()

//1-2 鎖加在裡面,判斷倆次

//singleton* singleton::getstance()

//// return m_lpsingleton;

//}// 1-3 在1-2版本中會存在如下問題:

/*在new singleton是先分配記憶體然後呼叫singleton建構函式,然後將位址給m_lpsingleton,但是會出現意外

分配完記憶體之後就賦值給m_lpsingleton,然後在呼叫建構函式.此時獲取的例項就不是真實的物件位址了。

*//*c++ 11版本之後的跨平台實現(volatile)

std::atomicsingleton::m_instance;

std::mutex singleton::m_mutex;

singleton* singleton::getstance()

} return tmp;

}*/

設計者模式 單例模式學習

單例模式是一種物件建立模式,它用於產生乙個物件的具體例項,它可以確保系統中的乙個類只產生乙個例項。在面試中經常會遇到,手寫一種單例模式實現方式,而單例的實現方式有 懶漢式 餓漢式 執行緒安全式 雙重檢查式和靜態內部類方式,為了便於學習記憶記錄一下。需要時建立乙個例項,所以第乙個是執行緒不安全的 pu...

c 設計者模式 工廠模式

1 面向介面程式設計 最簡單的表現形式是,你的變數要宣告成抽象基類 2 為什麼要實現面向介面程式設計 設計原則 依賴倒置原則 應該依賴抽象而不是細節。3 抽象基類是不能建立的,不能new的。4 建立物件的方法 除了在棧上 或者是在堆上建立物件,也可以通過方法返回物件。5 虛函式 執行時的依賴 模式定...

C 設計者模式 策略模式

策略模式 某些物件使用的演算法可能多種多樣,經常改變,如果將這些演算法編碼到 中,會使 變得異常負責,而且有時候支援不使用的演算法可能是一種效能負擔。對於上面描述可以舉如下的列子解釋。比如如下 所示 pragma once includeusing namespace std 假如我們要實現乙個功能...