智能指針
阿新 • • 發佈:2017-10-26
nbsp 動態分配 內存 center unique idt 變量 share 創建
一、智能指針類型&智能指針
1. 標準庫提供了兩種智能指針類型(來管理動態分配的對象)
2. 智能指針
智能指針就是一個變量、一個對象,即智能指針類型的實例化(比如在整型 int 和變量 i 中,智能指針就類似 i)
3. 智能指針與指針
智能指針的行為類似常規指針
區別:智能指針負責自動釋放所指向的對象
4. 兩種智能指針的區別
智能指針類型 | 特點 |
shared_ptr | 允許多個指針指向同一個對象 |
unique_ptr | 該類型指針“獨占”所指向的對象 |
二、shared_ptr
1. 形式
shared_ptr<T> p;
解釋:創建一個智能指針時,必須提供額外的信息——指針可以指向的類型
2. 默認初始化
智能指針中保存著一個空指針
3. 初始化
shared_ptr<T> p = make_shared<T>(args)
shared_ptr<int> p1(new int 100)
shared_ptr<int> p2(p)
4. 每個 shared_ptr 都有一個關聯的計數器,也稱引用計數(記錄有多少個 shared_ptr 指向相同的對象)
初始化一個shared_ptr對象後,其引用計數為1
當一個shared_ptr對象的計數器變為0時,它就會自動釋放自己所管理的對象(即釋放內存)
5. 備註
在最後一個shared_ptr銷毀前內存都不會釋放
智能指針