只容許基礎指針的一個全部者。 能夠移到新全部者(具備移動語義),但不會複製或共享(即咱們沒法獲得指向同一個對象的兩個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?但沒見過這麼實現的額)。繼承
咱們先來看實現:生命週期