中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-11-26 14:27:06 來源:億速云 閱讀:160 作者:iii 欄目:大數據

這篇文章主要講解了“C++11的shared_ptr與weak_ptr示例分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++11的shared_ptr與weak_ptr示例分析”吧!

實例背景

先看下面的類圖:

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

這是一臺臺式電腦的靜態建模。DesktopPC有四個部分組成:主機,鍵盤,鼠標和顯示器。這一部分是聚合關系的體現。

由于各個設備信息輸出的需求,

  1. 鍵盤和鼠標需要向主板報告用戶輸入信息,所以也管理著主板信息;

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


示例代碼

Monitor類

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

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

MainBoard類

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

MainBoard類需要向Monitor類輸出顯示信息,所以需要Monitor類的參照信息。但是因為只是參照,所以這里使用了weak_ptr。有一點需要強調:Monitor對象在其他地方被刪除時并不需要更新monitor的內容,因為lock方法會檢測到這個事實。

Keyboard類

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

Keyboard類需要像Mainboard類輸出鍵盤信息,所以需要Mainboard類的參照信息;weak_ptr的使用方法和Mainboard中一致。

Mouse類

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

Mouse類和Keyboard類的想法完全相同。

DesktopPC類

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

DesktopPC和各個設備之間雖然存在全體和部分的關系,但是因為每個設備可一個脫離DesktopPC獨立存在,所以這種關系是松散的聚合關系,依然使用weak_ptr來管理。

主程序

準備工作完成之后,就是收獲的時刻了。首先是構建各個對象,建立連接關系。

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

接下來確認各個shared_ptr的引用情況。

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

接下來確認系統動作。

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

在兩次執行之間,代碼刪除了Monitor對象。請注意這里并沒有一般的鏈接解除處理中常見的指針操作。

另外代碼中也不需要顯式的清理內存操作。

執行結果:

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

通過執行結果可以看出:

在系統執行動作之前,所有的引用計數都為1,并沒有被weak_ptr影響;

當Monitor對象被簡單粗暴地刪除之后,weak_ptr的確認機制正確地,以一種非常簡明的方式處理了這個變化。

敲黑板

使用shared_ptr以后,代碼不再需要顯式釋放申請的內存,使內存的管理更加簡單。

使用weak_ptr之后,可以通過lock方法來確認對象是否有效,使得內存的相互參照的管理更加容易。

感謝各位的閱讀,以上就是“C++11的shared_ptr與weak_ptr示例分析”的內容了,經過本文的學習后,相信大家對C++11的shared_ptr與weak_ptr示例分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

衡阳市| 化隆| 公主岭市| 五峰| 阿坝县| 任丘市| 安宁市| 剑河县| 仙游县| 秦皇岛市| 博客| 乐清市| 牟定县| 壶关县| 永川市| 偏关县| 泌阳县| 合阳县| 巍山| 双鸭山市| 开封县| 郁南县| 府谷县| 怀安县| 汉沽区| 高雄县| 同心县| 邛崃市| 上杭县| 大厂| 嘉鱼县| 郓城县| 桦南县| 库尔勒市| 措勤县| 和田市| 乐安县| 吐鲁番市| 南部县| 临汾市| 汤阴县|