您好,登錄后才能下訂單哦!
這篇文章主要講解了“C++11的shared_ptr與weak_ptr示例分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++11的shared_ptr與weak_ptr示例分析”吧!
實例背景
先看下面的類圖:
這是一臺臺式電腦的靜態建模。DesktopPC有四個部分組成:主機,鍵盤,鼠標和顯示器。這一部分是聚合關系的體現。
由于各個設備信息輸出的需求,
鍵盤和鼠標需要向主板報告用戶輸入信息,所以也管理著主板信息;
主板需要向顯示器輸出顯示內容,所以管理這顯示器信息;
示例代碼
Monitor類
Monitor只有一個輸出函數,除此之外不需要其他任何信息。
MainBoard類
MainBoard類需要向Monitor類輸出顯示信息,所以需要Monitor類的參照信息。但是因為只是參照,所以這里使用了weak_ptr。有一點需要強調:Monitor對象在其他地方被刪除時并不需要更新monitor的內容,因為lock方法會檢測到這個事實。
Keyboard類
Keyboard類需要像Mainboard類輸出鍵盤信息,所以需要Mainboard類的參照信息;weak_ptr的使用方法和Mainboard中一致。
Mouse類
Mouse類和Keyboard類的想法完全相同。
DesktopPC類
DesktopPC和各個設備之間雖然存在全體和部分的關系,但是因為每個設備可一個脫離DesktopPC獨立存在,所以這種關系是松散的聚合關系,依然使用weak_ptr來管理。
主程序
準備工作完成之后,就是收獲的時刻了。首先是構建各個對象,建立連接關系。
接下來確認各個shared_ptr的引用情況。
接下來確認系統動作。
在兩次執行之間,代碼刪除了Monitor對象。請注意這里并沒有一般的鏈接解除處理中常見的指針操作。
另外代碼中也不需要顯式的清理內存操作。
執行結果:
通過執行結果可以看出:
在系統執行動作之前,所有的引用計數都為1,并沒有被weak_ptr影響;
當Monitor對象被簡單粗暴地刪除之后,weak_ptr的確認機制正確地,以一種非常簡明的方式處理了這個變化。
敲黑板
使用shared_ptr以后,代碼不再需要顯式釋放申請的內存,使內存的管理更加簡單。
使用weak_ptr之后,可以通過lock方法來確認對象是否有效,使得內存的相互參照的管理更加容易。
感謝各位的閱讀,以上就是“C++11的shared_ptr與weak_ptr示例分析”的內容了,經過本文的學習后,相信大家對C++11的shared_ptr與weak_ptr示例分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。