unique_ptr是獨占型的智能指針,它不允許其他的智能指針共享其內部的指針,不允許通過賦值將一個unique_ptr賦值給另一個unique_ptr,如下面錯誤用法:
std::unique_ptr<T> myPtr(new T); std::unique_ptr<T> myOtherPtr = myPtr; // error
但是unique_ptr允許通過函數返回給其他的unique_ptr,還可以通過std::move來轉移到其他的unique_ptr,注意,這時它本身就不再擁有原來指針的所有權了。相比於auto_ptr而言,unique_ptr是顯示的轉移,而不是莫名其妙的報廢,因為auto_ptr調用拷貝構造函數後,原來的對象就失效了。
std::unique_ptr<T> myPtr(new T); std::unique_ptr<T> myOtherPtr = std::move(myPtr); // ok
對於一般的程序使用std::unique_ptr就夠了,如果是多線程方面,可能存在共同使用的問題,可以使用std::shared_ptr,注意不要引起循環引用。