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