轉!!!!!單例模式

2021-09-12 22:16:09 字數 2028 閱讀 7380

作用:保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點,使得系統中只有唯一的乙個物件例項。

應用:常用於管理資源,如日誌、執行緒池

實現要點:

在類中,要構造乙個例項,就必須呼叫類的建構函式,並且為了保證全域性只有乙個例項,

需防止在外部呼叫類的建構函式而構造例項,需要將建構函式的訪問許可權標記為private,

同時阻止拷貝建立物件時賦值時拷貝物件,因此也將它們宣告並許可權標記為private;

另外,需要提供乙個全域性訪問點,就需要在類中定義乙個static函式,返回在類內部唯一構造的例項。

但是需要注意的是多執行緒安全問題,如果同時有多個執行緒同時呼叫這個getinstance函式來建立例項時呢?那麼就會生成多個例項了,這時候就要考慮到處理方法了。

1.linux下處理**(使用pthread_once函式)

標頭檔案如下:

#include #include #include using namespace std;

class product ;//防止外部呼叫構造建立物件

product(const product& pro);//阻止拷貝建立物件

product& operator = (const product&pro);//阻止賦值物件

static product* instance;

static pthread_once_t s_init_once;

static void init();

public:

static product* getinstance();

static void destoryinstance();//記住例項的釋放不要在析構函式中處理,會有問題的。最好自己主動釋放

void test();

void work();

};

cpp檔案如下:

#include "main.h"

product* product::instance = null;

pthread_once_t product::s_init_once = pthread_once_init;

product* product::getinstance()

void product::test()

void product::work()

void product::init()

}void product::destoryinstance()

}int main()

2.windows下

//這段**是單例模式的另一種寫法

#include #include using namespace std;

class product ;//防止外部呼叫構造建立物件

product(const product& pro);//阻止拷貝建立物件

product& operator = (const product&pro);//阻止賦值物件

static product* instance;

public:

static product* getinstance();

static void destoryinstance();//記住例項的釋放不要在析構函式中處理,會有問題的。最好自己主動釋放

void test();

void work();

};

cpp檔案

#include "main.h"

product* product::instance = new product();//這裡一開始就分配了空間,所以也就不會出現執行緒安全問題

product* product::getinstance()

void product::test()

void product::work()

void product::destoryinstance()

}int main()

單例模式 單例模式

餓漢式 急切例項化 public class eagersingleton 2.宣告靜態成員變數並賦初始值 類初始化的時候靜態變數就被載入,因此叫做餓漢式 public static eagersingleton eagersingleton new eagersingleton 3.對外暴露公共的...

單例 單例模式

簡單的實現乙個單例 instancetype sharedinstance return instance 真正的單例模式 myclass sharedinstance return instance id allocwithzone nszone zone return nil id copywi...

單例模式 懶漢式單例模式

單例模式有餓漢時模式和懶漢式 單例模式也就是說同一類只返回乙個物件供外部類使用 懶漢式即延遲初始化單例。在多執行緒環境下,簡單的懶漢式會有執行緒安全。懶漢式單例模式解決線性安全問題如下 1 使用雙重檢查鎖機制解決執行緒安全問題。2 單例模式還有更好的解決方案,即使用靜態類方式。懶漢式單例模式典型 p...