亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

C語言設計模式之單例模式

2023-10-12 01:38:32
25
0

一、介紹

單例模式(Singleton Pattern)確保某一個類只有一個實例,這個類稱為單例類,單例模式是一種對象創建型模式。

思想思路如下:

  • 將構造函數訪問權限變成private或protected,不允許類的外部創建對象

  • 提供一個靜態成員函數,獲取內部創建對象的地址

實現有兩種方式:

  • 懶漢式

  • 餓漢式

二、餓漢式單例模式

餓了肯定要饑不擇食,所以在單例類定義的時候就進行實列化。

#include <iostream>

using namespace std;

class HungrySingleton
{
public:
	static HungrySingleton *getInstance() {
		return object;
	}
protected:
	HungrySingleton() {}
	HungrySingleton(const HungrySingleton &other) {
		*this = other;
	}

private:
	static HungrySingleton *object;
};

HungrySingleton *HungrySingleton::object = new HungrySingleton;

優點: 線程安全

缺點: 還沒有使用的時候,就已經創建了對象,浪費了內存空間

三、懶漢式單例模式

不到萬不得已就不會實列化類,即只有第一次用到類實列的時候才會去實列化

#include <iostream>

using namespace std;

class LazySingleton
{
public:
	static LazySingleton *getInstance() {
		if(!object) { //A,B
			object = new LazySingleton;
		}
		return object;
	}
protected:
	LazySingleton() {}
	LazySingleton(const LazySingleton &other) {
		*this = other;
	}

private:
	static LazySingleton *object;
};

LazySingleton * LazySingleton::object = NULL;

優點: 在使用的時候,才會分配內存創建對象

缺點: 在多線程中使用,會出現創建多個對象的問題,線程不安全

0條評論
0 / 1000
songziyang
6文章數
0粉絲數
songziyang
6 文章 | 0 粉絲
原創

C語言設計模式之單例模式

2023-10-12 01:38:32
25
0

一、介紹

單例模式(Singleton Pattern)確保某一個類只有一個實例,這個類稱為單例類,單例模式是一種對象創建型模式。

思想思路如下:

  • 將構造函數訪問權限變成private或protected,不允許類的外部創建對象

  • 提供一個靜態成員函數,獲取內部創建對象的地址

實現有兩種方式:

  • 懶漢式

  • 餓漢式

二、餓漢式單例模式

餓了肯定要饑不擇食,所以在單例類定義的時候就進行實列化。

#include <iostream>

using namespace std;

class HungrySingleton
{
public:
	static HungrySingleton *getInstance() {
		return object;
	}
protected:
	HungrySingleton() {}
	HungrySingleton(const HungrySingleton &other) {
		*this = other;
	}

private:
	static HungrySingleton *object;
};

HungrySingleton *HungrySingleton::object = new HungrySingleton;

優點: 線程安全

缺點: 還沒有使用的時候,就已經創建了對象,浪費了內存空間

三、懶漢式單例模式

不到萬不得已就不會實列化類,即只有第一次用到類實列的時候才會去實列化

#include <iostream>

using namespace std;

class LazySingleton
{
public:
	static LazySingleton *getInstance() {
		if(!object) { //A,B
			object = new LazySingleton;
		}
		return object;
	}
protected:
	LazySingleton() {}
	LazySingleton(const LazySingleton &other) {
		*this = other;
	}

private:
	static LazySingleton *object;
};

LazySingleton * LazySingleton::object = NULL;

優點: 在使用的時候,才會分配內存創建對象

缺點: 在多線程中使用,會出現創建多個對象的問題,線程不安全

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0