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


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

unique_ptr

為了避免和庫里面的名稱混淆,我自己實現的時候用的UniquePtr加以區分。

同一時刻,只能有一個unique_ptr指向某個內存區域,所以他是禁止拷貝的。unique_ptr本身是個對象,他生命周期結束時,會自動調用~unique_ptr(),將其所指對象銷毀。unique_ptr指針與其所指對象的關系:在智能指針生命周期內,可以改變智能指針所指對象,如創建智能指針時通過構造函數指定、通過reset方法重新指定、通過release方法釋放所有權、通過移動語義轉移所有權。

主要有這幾個功能:

1、能寫出異常安全的代碼

2、在容器中保存指針

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?但沒見過這么實現的額)。

我們先來看實現:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM