目錄
std::shared_ptr
std::shared_ptr包裝了new操作符動態分別的內存,可以自由拷貝複製,基本上是使用最多的一個智能指針類型。
1、std::make_shared封裝了new方法,boost::make_shared之前的原則是既然釋放資源delete由智能指針負責,那麼應該把new封裝起來,否則會讓人覺得自己調用了new,但沒有調用delete,似乎與誰申請,誰釋放的原則不符。C++也沿用了這一做法。
2、隨着引用對象的增加std::shared_ptr<Test> p2 = p1,指針的引用計數有1變爲2,當p2退出作用域後,p1的引用計數變回1,當main函數退出後,p1離開main函數的作用域,此時p1被銷燬,當p1銷燬時,檢測到引用計數已經爲1,就會在p1的析構函數中調用delete之前std::make_shared創建的指針。
std::weak_ptr
std::weak_ptr網上很多人說其實是爲了解決std::shared_ptr在相互引用的情況下出現的問題而存在的
std::unique_ptr
std::scoped_ptr
shared_ptr()如何避免循環引用:
shared_ptr是強引用,會計數,weak_ptr是弱引用,不會計數,
爲了避免shared_ptr對象相互只有導致循環引用,通常做法是:
owner持有指向child的shared_ptr,child持有指向owner的weak_ptr。
比如Observerable和Observer的關係
淺談shared_ptr及shared_ptr涉及到的循環引用問題,太難,以後深入研究2020.03.19
參考文獻:
C++ 智能指針詳解 boost庫的智能指針,暫時不瞭解,以後深入學習的時候再看。
【C++】智能指針詳解,寫的太亂。。。