只允許基礎指針的一個所有者。 可以移到新所有者(具有移動語義),但不會復制或共享(即我們無法得到指向同一個對象的兩個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?但沒見過這么實現的額)。
我們先來看實現: