c++11 智能指針 unique_ptr和shared_ptr


1、unique_ptr

//1、使用unique_ptr來管理動態內存,只要unique_ptr指針創建成功,其析構函數都會被調用,無需手動釋放。
//2、創建一個unique_ptr實例
unique_ptr<int> pInt(new int(5));
cout << *pInt;

//3、移動 
unique_ptr<int> pInt2 = std::move(pInt);    // 轉移所有權

//4、函數返回unique_ptr
unique_ptr不支持拷貝操作,但卻有一個例外:可以從函數中返回一個unique_ptr。
unique_ptr<int> clone(int p)
{
    unique_ptr<int> pInt(new int(p));
    return pInt;    // 返回unique_ptr
}

//5、在容器中保存指針
vector<unique_ptr<int>> vec;
unique_ptr<int> p(new int(5));
vec.push_back(std::move(p));    // 使用移動語義

//6、管理動態數組
unique_ptr<int[]> p(new int[5])

2、share_ptr

 
shared_ptr基於”引用計數”模型實現,多個shared_ptr可指向同一個動態對象,並維護一個共享的引用計數器,記錄了引用同一對象的shared_ptr實例的數量。當最后一個指向動態對象的shared_ptr銷毀時,會自動銷毀其所指對象(通過delete操作符)。

//1、初始化
std::shared_ptr<int> p3 = std::make_shared<int>(2);  //方式0 推薦
std::shared_ptr<int> p1(new int(1)); //方式1
std::shared_ptr<int> p2 = p1; //方式2
//不要用一個原始指針初始化多個shared_ptr
//不要在函數實參中創建shared_ptr。如下
void f(shared_ptr<int>(new int))

//盡量不用shared_ptr 管理this指針
//2、放入容器中的動態對象,使用shared_ptr包裝,比unique_ptr更合適 
vector<shared_ptr<int>> vec;
class T
{}
std::vector<std::shared_ptr<T>>

 

https://www.cnblogs.com/lsgxeva/p/7788061.html     

https://www.cnblogs.com/DswCnblog/p/5628195.html 


免責聲明!

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



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