溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

C++11的shared_ptr與weak_ptr示例分析

發(fā)布時(shí)間:2021-11-26 14:27:06 來(lái)源:億速云 閱讀:158 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“C++11的shared_ptr與weak_ptr示例分析”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“C++11的shared_ptr與weak_ptr示例分析”吧!

實(shí)例背景

先看下面的類(lèi)圖:

C++11的shared_ptr與weak_ptr示例分析

這是一臺(tái)臺(tái)式電腦的靜態(tài)建模。DesktopPC有四個(gè)部分組成:主機(jī),鍵盤(pán),鼠標(biāo)和顯示器。這一部分是聚合關(guān)系的體現(xiàn)。

由于各個(gè)設(shè)備信息輸出的需求,

  1. 鍵盤(pán)和鼠標(biāo)需要向主板報(bào)告用戶(hù)輸入信息,所以也管理著主板信息;

  2. 主板需要向顯示器輸出顯示內(nèi)容,所以管理這顯示器信息;


示例代碼

Monitor類(lèi)

C++11的shared_ptr與weak_ptr示例分析

Monitor只有一個(gè)輸出函數(shù),除此之外不需要其他任何信息。

MainBoard類(lèi)

C++11的shared_ptr與weak_ptr示例分析

MainBoard類(lèi)需要向Monitor類(lèi)輸出顯示信息,所以需要Monitor類(lèi)的參照信息。但是因?yàn)橹皇菂⒄?,所以這里使用了weak_ptr。有一點(diǎn)需要強(qiáng)調(diào):Monitor對(duì)象在其他地方被刪除時(shí)并不需要更新monitor的內(nèi)容,因?yàn)閘ock方法會(huì)檢測(cè)到這個(gè)事實(shí)。

Keyboard類(lèi)

C++11的shared_ptr與weak_ptr示例分析

Keyboard類(lèi)需要像Mainboard類(lèi)輸出鍵盤(pán)信息,所以需要Mainboard類(lèi)的參照信息;weak_ptr的使用方法和Mainboard中一致。

Mouse類(lèi)

C++11的shared_ptr與weak_ptr示例分析

Mouse類(lèi)和Keyboard類(lèi)的想法完全相同。

DesktopPC類(lèi)

C++11的shared_ptr與weak_ptr示例分析

DesktopPC和各個(gè)設(shè)備之間雖然存在全體和部分的關(guān)系,但是因?yàn)槊總€(gè)設(shè)備可一個(gè)脫離DesktopPC獨(dú)立存在,所以這種關(guān)系是松散的聚合關(guān)系,依然使用weak_ptr來(lái)管理。

主程序

準(zhǔn)備工作完成之后,就是收獲的時(shí)刻了。首先是構(gòu)建各個(gè)對(duì)象,建立連接關(guān)系。

C++11的shared_ptr與weak_ptr示例分析

接下來(lái)確認(rèn)各個(gè)shared_ptr的引用情況。

C++11的shared_ptr與weak_ptr示例分析

接下來(lái)確認(rèn)系統(tǒng)動(dòng)作。

C++11的shared_ptr與weak_ptr示例分析

在兩次執(zhí)行之間,代碼刪除了Monitor對(duì)象。請(qǐng)注意這里并沒(méi)有一般的鏈接解除處理中常見(jiàn)的指針操作。

另外代碼中也不需要顯式的清理內(nèi)存操作。

執(zhí)行結(jié)果:

C++11的shared_ptr與weak_ptr示例分析

通過(guò)執(zhí)行結(jié)果可以看出:

在系統(tǒng)執(zhí)行動(dòng)作之前,所有的引用計(jì)數(shù)都為1,并沒(méi)有被weak_ptr影響;

當(dāng)Monitor對(duì)象被簡(jiǎn)單粗暴地刪除之后,weak_ptr的確認(rèn)機(jī)制正確地,以一種非常簡(jiǎn)明的方式處理了這個(gè)變化。

敲黑板

使用shared_ptr以后,代碼不再需要顯式釋放申請(qǐng)的內(nèi)存,使內(nèi)存的管理更加簡(jiǎn)單。

使用weak_ptr之后,可以通過(guò)lock方法來(lái)確認(rèn)對(duì)象是否有效,使得內(nèi)存的相互參照的管理更加容易。

感謝各位的閱讀,以上就是“C++11的shared_ptr與weak_ptr示例分析”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)C++11的shared_ptr與weak_ptr示例分析這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI