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 

原文链接: https://www.cnblogs.com/lovebay/p/12767718.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    c++11 智能指针 unique_ptr和shared_ptr

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/344130

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午2:30
下一篇 2023年3月2日 上午2:31

相关推荐