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