您好,登錄后才能下訂單哦!
這篇文章主要講解了“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)圖:
這是一臺(tái)臺(tái)式電腦的靜態(tài)建模。DesktopPC有四個(gè)部分組成:主機(jī),鍵盤(pán),鼠標(biāo)和顯示器。這一部分是聚合關(guān)系的體現(xiàn)。
由于各個(gè)設(shè)備信息輸出的需求,
鍵盤(pán)和鼠標(biāo)需要向主板報(bào)告用戶(hù)輸入信息,所以也管理著主板信息;
主板需要向顯示器輸出顯示內(nèi)容,所以管理這顯示器信息;
示例代碼
Monitor類(lèi)
Monitor只有一個(gè)輸出函數(shù),除此之外不需要其他任何信息。
MainBoard類(lèi)
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)
Keyboard類(lèi)需要像Mainboard類(lèi)輸出鍵盤(pán)信息,所以需要Mainboard類(lèi)的參照信息;weak_ptr的使用方法和Mainboard中一致。
Mouse類(lèi)
Mouse類(lèi)和Keyboard類(lèi)的想法完全相同。
DesktopPC類(lèi)
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)系。
接下來(lái)確認(rèn)各個(gè)shared_ptr的引用情況。
接下來(lái)確認(rèn)系統(tǒng)動(dòng)作。
在兩次執(zhí)行之間,代碼刪除了Monitor對(duì)象。請(qǐng)注意這里并沒(méi)有一般的鏈接解除處理中常見(jiàn)的指針操作。
另外代碼中也不需要顯式的清理內(nèi)存操作。
執(zhí)行結(jié)果:
通過(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)注!
免責(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)容。