1. 程式人生 > >智能指針

智能指針

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銷毀前內存都不會釋放

智能指針