工廠模式 簡單工廠模式 智慧型指標的使用

2021-10-20 00:19:29 字數 2621 閱讀 5366

1.工廠類(factory):核心部分,負責實現建立所有產品的內部邏輯,工廠類可以被外界直接呼叫,建立所需物件。

2.抽象產品類:工廠類所建立的所有物件的父類,封裝了產品物件的公共方法,所有的具體產品為其子類物件。

3.產品類:簡單工廠模式的建立目標,所有被建立的物件都是某個具體類的例項。它要實現抽象產品中宣告的抽象方法(有關抽象類)。

**示例:

/*

* @description:

* @version: 2.0

* @author: feng chao

* @date: 2021-02-24 13:58:22

* @lasteditors: feng chao

* @lastedittime: 2021-02-24 15:40:50

*/#include "../common.h"

typedef enum

type_food;

//抽象產品類

class cfood

; virtual void showfoodname(){};

virtual ~cfood(){};

};//具體產品類a

class cfood_a : public cfood

void showfoodname()

~cfood_a()

};//具體產品類b

class cfood_b : public cfood

void showfoodname()

~cfood_b()

};//具體產品類c

class cfood_c : public cfood

void showfoodname()

~cfood_c()

};//工廠類

class cfoodfactory

}~cfoodfactory()

結果展示:

i'm food_a

i'm food_b

i'm food_c

delete food_a

delete food_b

delete food_c

delete cfoodfactory

以上**,如果去掉delete語句,結果:

i'm food_a

i'm food_b

i'm food_c

這就是普通指標的不足之處。

使用unique_ptr智慧型指標:

unique_ptr實現獨佔式擁有或嚴格擁有概念,保證同一時間內只有乙個智慧型指標可以指向該物件。它對於避免資源洩露(例如「以new建立物件後因為發生異常而忘記呼叫delete」)特別有用。另外unique_ptr還有更聰明的地方:當程式試圖將乙個 unique_ptr 賦值給另乙個時,如果源 unique_ptr 是個臨時右值,編譯器允許這麼做;如果源 unique_ptr 將存在一段時間,編譯器將禁止這麼做。

int main()

會正常析構:

delete cfoodfactory

delete cfoodfactory

使用shared_ptr智慧型指標:

shared_ptr實現共享式擁有概念。多個智慧型指標可以指向相同物件,該物件和其相關資源會在「最後乙個引用被銷毀」時候釋放。從名字share就可以看出了資源可以被多個指標共享,它使用計數機制來表明資源被幾個指標共享。可以通過成員函式use_count()來檢視資源的所有者個數。除了可以通過new來構造,還可以通過傳入auto_ptr, unique_ptr,weak_ptr來構造。當我們呼叫release()時,當前指標會釋放資源所有權,計數減一。當計數等於0時,資源會被釋放。

**:

int main()

結果:

delete cfoodfactory
share_ptr雖然已經很好用了,但是有一點share_ptr智慧型指標還是有記憶體洩露的情況,當兩個物件相互使用乙個shared_ptr成員變數指向對方,會造成迴圈引用,使引用計數失效,從而導致記憶體洩漏。

weak_ptr 是一種不控制物件生命週期的智慧型指標, 它指向乙個 shared_ptr 管理的物件. 進行該物件的記憶體管理的是那個強引用的shared_ptr, weak_ptr只是提供了對管理物件的乙個訪問手段。weak_ptr 設計的目的是為配合 shared_ptr 而引入的一種智慧型指標來協助 shared_ptr 工作, 它只可以從乙個 shared_ptr 或另乙個 weak_ptr 物件構造, 它的構造和析構不會引起引用記數的增加或減少。weak_ptr是用來解決shared_ptr相互引用時的死鎖問題,如果說兩個shared_ptr相互引用,那麼這兩個指標的引用計數永遠不可能下降為0,資源永遠不會釋放。它是對物件的一種弱引用,不會增加物件的引用計數,和shared_ptr之間可以相互轉化,shared_ptr可以直接賦值給它,它可以通過呼叫lock函式來獲得shared_ptr。

暫時不補充其它的**和介紹。

簡單工廠模式,工廠模式,抽象工廠模式

三種模式看了一天,記錄下自己的理解 headfirst,比薩店為例 1,簡單工廠模式 乙個具體的工廠類 pizzafactory 乙個抽象的產品類pizza,可以派生出多個具體的產品類 客戶 pizzastore類 工廠類 pizzafactory類關聯產品類pizza,工廠生產出不同型別的pizz...

簡單工廠模式 工廠模式 抽象工廠模式

簡單工廠模式 簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關類,對於客戶端來說,去除了與具體產品的依賴。但增加功能時,需增加 case 邏輯判斷分支條件,修改了原有的類,我們不但對擴充套件開發了,對修改也開放了,違背了開放 封閉原則。工廠方法模式,定義了乙...

簡單工廠模式 工廠模式 抽象工廠模式

其實這個三個c 的設計模式已經學習很長時間了,今晚才想起來要寫這三個設計模式,為什麼要用c 中的設計模式呢?for example,你已經會開車了,正著開,倒著開,轉彎,這些都是開車基本的,但是你並沒有很高的車技,並不會炫酷。漂移,就好像c 中的設計模式一樣,在你學好c 的基礎上,嫻熟的應用出的新技...