本篇介紹C++11中新增的智能指針:unique_ptr、shared_ptr、weak_ptr。使用智能指針可以免於我們去主動管理內存,智能指針會自動釋放內存:
來源:https://blog.csdn.net/WizardtoH/article/details/81016953
https://blog.csdn.net/ithiker/article/details/51532484
一般的智能指針都定義爲一個模板類,它的類型由被管理的對象類型初始化,內部包含了指向該對象的指針以及指向輔助生命週期管理的管理對象的指針。
C++11中unique_ptr, shared_ptr, weak_ptr的特點如下:
- unique_ptr獨享被管理對象,同一時刻只能有一個unique_ptr擁有對象的所有權,當其被賦值時對象的所有權也發生轉移,當其被銷燬時被管理對象也自動被銷燬
- shared_ptr共享被管理對象,同一時刻可以有多個shared_ptr擁有對象的所有權,當最後一個shared_ptr對象銷燬時,被管理對象自動銷燬
- weak_ptr不擁有對象的所有權,但是它可以判斷對象是否存在和返回指向對象的shared_ptr類型指針;它的用途之一是解決多個對象內部含有shared_ptr循環指向,導致對象無法釋放的問題
https://blog.csdn.net/Leeds1993/article/details/54563918
weak_ptr也是一個引用計數型智能指針,但是它不增加對象的引用計數,即弱引用。與之相對,shared_ptr是強引用,只要有一個指向對象的shared_ptr存在,該對象就不會析構,直到指向對象的最後一個shared_ptr析構或reset()時纔會被銷燬。
https://blog.csdn.net/han8040laixin/article/details/78646250
詳細分析智能指針shared_ptr存在的循環引用缺陷,以及通過weak_ptr來解決