華爲面試系列:智能指針

目錄

std::shared_ptr

std::weak_ptr

std::unique_ptr

std::scoped_ptr


堆內存與棧內存

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創建的指針。

C++內存管理之shared_ptr

C++11 shared_ptr(智能指針)詳解

std::weak_ptr

std::weak_ptr網上很多人說其實是爲了解決std::shared_ptr在相互引用的情況下出現的問題而存在的

智能指針(三):weak_ptr淺析

智能指針 weak_ptr

C++ 11 創建和使用共享 weak_ptr

std::unique_ptr

C++ 智能指針 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++】智能指針詳解,寫的太亂。。。

C++常規指針類(淺複製),智能指針類(計數類),值行類(深複製) 區別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章