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引用计数分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-07Dify + TiDB Vector,快速构建你的AI Agent
- 2024-07-06有没有什么开源的py项目可以对图像进行分类-icode9专业技术文章分享
- 2024-07-05feign默认connecttimeout和readtimeout是多少-icode9专业技术文章分享
- 2024-07-05idea控制台,日志太多,导致部分想看得日志被刷走 搜不到-icode9专业技术文章分享
- 2024-07-05The server selected protocol version Tls10 is not accepted by client preferences [TLs12]-icode9专业技术文章分享
- 2024-07-05怎么清理项目缓存-icode9专业技术文章分享
- 2024-07-04安装 Eyoucms详细图文教程-icode9专业技术文章分享
- 2024-07-04ueditor 复制文章时,图片的链接是一个下载图片地址,该如何处理?-icode9专业技术文章分享
- 2024-07-04怎样判断host有没有对wordpress有缓存呢-icode9专业技术文章分享
- 2024-07-04具有编译功能的系统make后,无法ssh连接-icode9专业技术文章分享