shared_ptr,共享指针应用于需要多个指针指向同一个对象的情况。

我们可以认为每个shared_ptr都有一个关联的计数器,通常称其为引用计数,无论何时我们拷贝一个shared_ptr,计数器都会递增。当我们给shared_ptr赋予一个新值或是shared_ptr被销毁(例如一个局部的shared_ptr离开其作用域)时,计数器就会递减,一旦一个shared_ptr的计数器变为0,它就会自动释放自己所管理的对象。

int *p = new int(1024) ;
//
int *q = new int ; // null ptr
// 列表初始化
vector<int> *list = new vector<int>{0,1,2}; //list 指向数组的首个元素地址
//声明一个const int型的指针,并初始化
const int* a = new const int(10) ;// 共享指针操作
shared_ptr<int>  p1 ;
shared_ptr<string> p2 ; // 创建时不进行初始化if(p1 && p1->get())
{*p1 =  10 ;
}// 采用make_shared函数来初始化
p1 = make_shared<int>(42) ;
//声明空指针
make_shared<string> p4 = make_shared<string>() ;

shared_ptr赋值,赋值后会增加use_count计数。

p被重新赋值后计数会减少1

auto p = make_shared<int>(42);
auto q(p);

shared_ptr自动销毁所管理的对象
当指向一个对象的最后一个shared_ptr被销毁时,shared_ptr类会自动销毁此对象,它是通过另一个特殊的成员函数-析构函数完成销毁工作的,类似于构造函数,每个类都有一个析构函数。析构函数控制对象销毁时做什么操作。析构函数一般用来释放对象所分配的资源。shared_ptr的析构函数会递减它所指向的对象的引用计数。如果引用计数变为0,shared_ptr的析构函数就会销毁对象,并释放它所占用的内存。

shared_ptr还会自动释放相关联的内存
当动态对象不再被使用时,shared_ptr类还会自动释放动态对象,这一特性使得动态内存的使用变得非常容易。如果你将shared_ptr存放于一个容器中,而后不再需要全部元素,而只使用其中一部分,要记得用erase删除不再需要的那些元素。
————————————————
版权声明:本文为CSDN博主「Billy12138」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/flowing_wind/article/details/81301001

重点关注:

1. 不能使用一个原始对象去初始化两个shared指针。共享指针中的计数器无法处理这一情形。

2. weak_ptr

弱指针是共享指针的伴生指针,它可指向于shared指针相同的对象,但是不增加对于shared指针的计数。

在使用过程中,要先判断指向对象是否被释放

weak_ptr<string> p ;
shared_ptr<string> p2(new string("aaa"));p = p2 ; // 弱共享和shared指针共享对象//使用弱指针
if(shared_ptr<string> np = p.lock())
{// command
}// 如果弱指针无对象,则np为空

C++智能指针 shared_ptr、weak_ptr相关推荐

  1. 深入学习c++--智能指针(二) weak_ptr(打破shared_ptr循环引用)

    1. 几种智能指针 1. auto_ptr: c++11中推荐不使用他(放弃) 2. shared_ptr: 拥有共享对象所有权语义的智能指针 3. unique_ptr: 拥有独有对象所有权语义的智 ...

  2. C++智能指针shared_ptr、unique_ptr以及weak_ptr

    目录 shared_ptr类 shared_ptr和unique_ptr都支持的操作 shared_ptr独有的操作 make_shared函数 shared_ptr自动销毁所管理的对象 由普通指针管 ...

  3. 智能指针(shared_ptr、unique_ptr、weak_ptr)的使用

    智能指针的使用 一.shared_ptr 1.创建一个shared_ptr 2.shared_ptr的常用成员函数 reset成员函数的使用 3.==注意事项== 二.unique_ptr 1.uni ...

  4. C++智能指针:weak_ptr实现详解

    文章目录 weak_ptr描述 声明 作用 原理实现 函数成员使用 总结 weak_ptr描述 声明 头文件:<memory> 模版类:template <class T> c ...

  5. 智能指针shared_ptr的用法

    智能指针shared_ptr的用法 2016-12-03 15:39 by jiayayao, 360 阅读, 0 评论, 收藏, 编辑 为了解决C++内存泄漏的问题,C++11引入了智能指针(Sma ...

  6. Boost智能指针——shared_ptr

    boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限.顾名思义,boost::shared_ptr是可以 ...

  7. 智能指针shared_ptr

    如果有可能就使用unique_ptr,然后很多时候对象是需要共享的,因此shared_ptr也就会用得很多.shared_ptr允许多个指向同一个对象,当指向对象的最后一个shared_ptr销毁时, ...

  8. 智能指针shared_ptr的几个例子

    #include <string> #include <iostream> #include <memory> //智能指针定义在头文件memory中,例如shar ...

  9. 智能指针shared_ptr的原理、用法和注意事项

    智能指针shared_ptr的原理.用法和注意事项 1 前言 2 shared_ptr原理 3 shared_ptr的基本用法 3.1 初始化 3.2 获取原始指针 4 智能指针和动态数组 4.1 c ...

  10. get方法报空指针_智能指针shared_ptr踩坑笔记

    平时写代码一直避免使用指针,但在某些场景下指针的使用还是有必要的.最近在项目中简单使用了一下智能指针(shared_ptr),结果踩了不少坑,差点就爬不出来了.痛定思痛抱着<Cpp Primer ...

最新文章

  1. C/C++协程库libco:微信怎样漂亮地完成异步化改造
  2. aix下mysql启动命令_AIX常用操作命令
  3. shiro-权限概述
  4. 轻松创建nodejs服务器(1):一个简单nodejs服务器例子
  5. matlab gui从模型里获取参数程序,matlab gui 中参数传递的问题
  6. 关于如何收集,标准化和集中化处理Golang日志的一些建议
  7. 笨办法学 Python · 续 练习 28:`sh`
  8. POJ 1321-棋盘问题-简单搜索DFS
  9. Spring Security(02)——关于登录
  10. 生成永不过期的微信群二维码
  11. 优化广域网带宽,让应用加速
  12. 搭建sql-libs的环境
  13. 290页11万字数字农业农村项目规划建设方案2022
  14. Linux系统Centos7的虚拟机安装
  15. HRBU 2021年暑期训练阶段二Day3
  16. excel基础-note-4.25
  17. python抢票开发——设备预约助手实现
  18. 数据存储单位的换算单位
  19. 搞懂Python切片中start、end、steps正负的区别
  20. 消除计算机上的静电有哪些方法,电脑静电如何消除详解【图文介绍】

热门文章

  1. easyUI下datagrid嵌套显示
  2. [CentOS Python系列] 四.阿里云服务器CentOS连接远程MySQL数据库及pymsql
  3. 【学习排序】 Learning to Rank 中Listwise关于ListNet算法讲解及实现
  4. iOS之深入解析分类Category的底层原理
  5. 2017\National _C_C++_C\4.小数第n位
  6. 中国大学MOOC 计算机组成原理第4章 测试(下)
  7. Netty实战 IM即时通讯系统(十二)构建客户端与服务端pipeline
  8. 【Java3】封装,对象数组,构造器,this/super/继承,抽象
  9. 【Linux】一步一步学Linux——ssh-add命令(182)
  10. 展示 测速_科技产品 | 人工智能amp;科技展示厅——助力高校人工智能学科建设及产业人才培养...