C++引用计数技术及智能指针

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了C++引用计数技术及智能指针脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

智能指针是一个类,它对普通指针进行封装,使智能指针类对象具有普通指针类型一样的操作。具体而言,复制对象时,副本和原对象都指向同一存储区域,如果通过一个副本改变其所指的值,则通过另一对象访问的值也会改变,所不同的是,智能指针能够对内存进行进行自动管理,避免出现悬垂指针等情况。

如何让指针知道还有其它指针的存在呢?引用计数允许有多个相同值的对象共享这个值的实现,引用计数的使用常有两个目的:

  • 简化跟踪堆中(也即C++new出来的)的对象的过程。一旦一个对象通过调用new被分配出来,记录谁拥有这个对象是很重要的,因为其所有者要负责对它进行delete。但是对象所有者可以有多个,且所有权能够被传递,这就使得内存跟踪变得困难。引用计数可以跟踪对象所有权,并能够自动销毁对象。可以说引用计数是个简单的垃圾回收体系。

  • 节省内存,提高程序运行效率。很多对象有相同的值,为这多个相同的值存储多个副本是很浪费空间的,所以最好做法是让左右对象都共享同一个值的实现。C++标准库中string类采取一种称为”写时复制“的技术,使得只有当字符串被修改的时候才创建各自的拷贝,否则可能(标准库允许使用但没强制要求)采用引用计数技术来管理共享对象的多个对象。

引用计数是实现智能指针的一种通用方法。智能指针将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针。它的具体做法如下:

  • 当创建类的新对象时,初始化指针,并将引用计数设置为1

  • 当对象作为另一个对象的副本时,复制构造函数复制副本指针,并增加与指针相应的引用计数;

  • 使用赋值操作符对一个对象进行赋值时,处理复杂一点,先使左操作数的指针的引用计数减1(为何减1:因为指针已经指向别的地方),如果减1后引用计数为0,则释放指针所指对象内存。然后增加右操作数所指对象的引用计数(为何增加:因为此时做操作数指向对象即右操作数指向对象);

  • 调用析构函数时,析构函数先使引用计数减1,如果减至0delete对象。

参考文章

C++ 引用计数技术及智能指针的简单实现

脚本宝典总结

以上是脚本宝典为你收集整理的C++引用计数技术及智能指针全部内容,希望文章能够帮你解决C++引用计数技术及智能指针所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: