sharedptr引用计数

越甲八千 2020-10-22 04:44:48
#include <iostream>
#include<memory>
#include<string>
using namespace std;


int main()
{
auto p = make_shared<int>(42); //!指向的对象只有p一个引用者。
cout << p.use_count() << endl;
auto q = make_shared<int>(56);//!指向的对象只有q一个引用者。
cout << q.use_count() << endl;

cout << "---------afterAssin-----" << endl;
p = q; //!p原来引用的对象经过赋值之后释放掉了,q引用的对象有了p和q两个引用。
cout << *p << "==" << *q << endl;
cout << q.use_count() << endl;

cout << p.use_count() << endl;
}

输出结果:
1
1
-------- - afterAssin---- -
56 == 56
2
2
请按任意键继续. . .

问题:为何最后一个输出是2 而不是0
...全文
154 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-08
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
SleekStone 2020-10-22
  • 打赏
  • 举报
回复
二楼说得对啊
越甲八千 2020-10-22
  • 打赏
  • 举报
回复
找到原因了,p=q , q赋值给p 后,p,q指向同一个引用,所以是2

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧