栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

shared

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

shared

工作原理

1.当shared_ptr 对象与其他shared_ptr 对象关联时,则将与此指针关联的引用计数+1。
2.当任何 shared_ptr 对象超出作用域时,则在其析构函数中,它将关联指针的引用计数减1。如果引用计数变为0,则表示没有其他 shared_ptr 对象与此内存关联,析构函数会使用delete函数删除该内存。

使用的注意事项:

运算符:

与普通指针相比,shared_ptr仅提供-> 、*和==运算符,没有+、-、++、--、[]等运算符。

初始化:

  • 构造函数初始化:

        int *pNum = new int(23);
        std::shared_ptr p1(pNum);

  • 拷贝构造函数初始化:

        std::shared_ptr p2(p1);

  • 不允许同一个指针初始化多个智能指针对象:

        std::shared_ptr p3(pNum);   //不允许

        原因-当p1超出作用域时会调用delete释放pNum所指的内存,此时pNum成了悬空指针, 当p3超出作用域再次delete的时候就可能会出错。

  • 不允许用栈中指针构造 shared_ptr对象:

        shared_ptr 默认析构函数使用delete来删除关联指针,所以构造必须使用new的堆空间指针,否则会报错。

  • make_shared()<>初始化:

        std::shared_ptr p1 = make_shared(123);

        但是用这种方式初始化,没有办法定义删除器,用shared_ptr管理动态数组时,需要指定删除器,因为shared_ptr的默认删除器不支持数组对象。

std::shared_ptr p1(new int[10], [](int *p){
delete [] p;});

参考:智能指针的用法shared_ptr_方池安夏的博客-CSDN博客_智能指针shared_ptr

C++智能指针详解:shared_ptr_吃素的施子的博客-CSDN博客_c++ shared_ptr

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/951761.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号