智能指針原理及實現(2)unique_ptr

只容許基礎指針的一個全部者。 能夠移到新全部者(具備移動語義),但不會複製或共享(即咱們沒法獲得指向同一個對象的兩個unique_ptr)。 替換已棄用的 auto_ptr。 相較於 boost::scoped_ptr。 unique_ptr 小巧高效;大小等同於一個指針,支持 rvalue 引用,從而可實現快速插入和對 STL 集合的檢索。在頭文件<memory>中。安全

unique_ptr函數

爲了不和庫裏面的名稱混淆,我本身實現的時候用的UniquePtr加以區分。spa

同一時刻,只能有一個unique_ptr指向某個內存區域,因此他是禁止拷貝的。unique_ptr自己是個對象,他生命週期結束時,會自動調用~unique_ptr(),將其所指對象銷燬。unique_ptr指針與其所指對象的關係:在智能指針生命週期內,能夠改變智能指針所指對象,如建立智能指針時經過構造函數指定、經過reset方法從新指定、經過release方法釋放全部權、經過移動語義轉移全部權。指針

主要有這幾個功能:code

一、能寫出異常安全的代碼對象

二、在容器中保存指針blog

1 int main() 2 { 3     vector<unique_ptr<int>> vec; 4     unique_ptr<int> p(new int(5)); 5     vec.push_back(std::move(p));    // 使用移動語義
6 }

unique_ptr不支持對象間的拷貝和賦值。(困惑:class unique_ptr是否是應該繼承noncopyable?但沒見過這麼實現的額)。繼承

咱們先來看實現:生命週期

相關文章
相關標籤/搜索