C++智能指针 shared_ptr引用计数分析
2021/9/11 1:04:59
本文主要是介绍C++智能指针 shared_ptr引用计数分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 前言
- 一、C++ 智能指针shared_ptr
- 总结
前言
今天和人争论C++ 智能指针shared_ptr引用计数问题,然后代码实现验证,这里分享给大家。
一、C++ 智能指针shared_ptr
shared_ptr智能指针是一个类,用于管理new 分配的对象,该智能指针类内部有一个保存引用计数的属性,通过这个属性来判断是否可以释放要管理的对象, 该判断是在智能指针类shared_ptr的析构函数中进行。当引用计数为0时,表示当前程序没有用到该管理对象的地方了,可以释放该管理对象了,即delete 对象。
什么时候引用计数会改变呢?请看下面程序
std::shared_ptr<int> sptr1 = std::make_shared<int>(); std::cout << "sptr1 use count:"<<sptr1.use_count() << std::endl; { std::cout << std::endl; std::shared_ptr<int> sptr2 = sptr1; std::cout << std::endl << "sptr2=sptr1;" << std::endl; std::cout << "sptr1 use count:" << sptr1.use_count() << std::endl; std::cout << "sptr2 use count:" << sptr2.use_count() << std::endl; std::cout << std::endl; std::shared_ptr<int> sptr3 = std::make_shared<int>(); std::cout << "sptr3 uwe count:" << sptr3.use_count() << std::endl; std::cout << std::endl << "sptr2=sptr3;" << std::endl; sptr2 = sptr3; std::cout << "sptr1 use count:" << sptr1.use_count() << std::endl; std::cout << "sptr3 uwe count:" << sptr3.use_count() << std::endl; std::cout << "sptr2 use count:" << sptr2.use_count() << std::endl; std::cout << std::endl; std::shared_ptr<int> sptr5 = sptr1; std::cout << "sptr5=sptr1;" << std::endl; std::cout << "sptr5 use count:" << sptr5.use_count() << std::endl; std::cout << "sptr1 use count:" << sptr1.use_count() << std::endl; std::cout << "sptr5 end..." << std::endl; } std::cout <<std::endl<< "sptr1 use count:" << sptr1.use_count() << std::endl; std::shared_ptr<int> sptr4 = std::make_shared<int>(); std::cout << std::endl<< "sptr4 use count:" << sptr4.use_count() << std::endl; sptr1 = sptr4; std::cout << std::endl<< "sptr1 = sptr4;" << std::endl; std::cout << "sptr4 use count:" << sptr4.use_count() << std::endl; std::cout << "sptr1 use count:" << sptr1.use_count() << std::endl; std::cout << std::endl<<"reset sptr1" << std::endl; sptr1.reset();// reset 后,sptr1引用计数归0, sptr4引用计数-1 std::cout << "sptr4 use count:" << sptr4.use_count() << std::endl; std::cout << "sptr1 use count:" << sptr1.use_count() << std::endl;
执行结果:
总结
智能指针引用计数改变:构造函数(sptr1),赋值操作符(sptr2=sptr3),拷贝构造函数(std::shared_ptr sptr2=sptr1)以及调用reset()函数(sptr1.reset()),拷贝的智能指针shared_ptr声明周期结束(sptr5)。
这篇关于C++智能指针 shared_ptr引用计数分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-10Rakuten 乐天积分系统从 Cassandra 到 TiDB 的选型与实战
- 2025-01-09CMS内容管理系统是什么?如何选择适合你的平台?
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用