究竟什么是引用计数?特别是,对于 C++,它是什么?如果我们不处理它们,我们会面临哪些问题?所有语言都需要引用计数吗?
4 回答
究竟什么是引用计数?特别是,对于 C++,它是什么?
简单来说,引用计数意味着计算对对象的引用。
通常,C++ 采用RAII技术。其中,管理类型对象的释放的能力依赖于类型对象本身。这意味着用户不必显式地管理对象的生命周期及其释放,执行此管理的功能内置于对象本身中。
此功能意味着对象应该存在并保持有效,直到有利益相关者引用该对象,这是通过引用计数来实现的。每次共享(复制)对象时,引用计数(通常是类类型内的成员)都会增加,每次调用析构函数时计数都会减少,当计数达到 0 时,任何人都不会引用该对象并且它标志着其生命周期的结束,因此它被破坏了。
如果我们不处理它们,我们会面临哪些问题?
这将意味着不再有 RAII,以及无休止且经常出错的手动资源管理。
简而言之,编程噩梦。
所有语言都需要引用计数吗?
语言不需要引用计数,但使用该技术为该语言的用户提供了非常简单的使用和更少的努力,因此大多数语言更喜欢使用它来为他们的用户提供这些优势。
引用计数是一种简单但不完整的垃圾检测方法。
当计数器达到零时,您可以释放该对象。
但是如果没有更多使用的对象相互引用循环,它们将永远不会被释放
考虑 a引用b,b引用a,但没有其他引用a 或 b。a 和 b的引用计数仍为 1(= 正在使用中)
引用计数垃圾收集是一种强大的内存管理技术,有助于防止对象被意外删除或多次删除。该技术不仅限于 C++ 代码,尽管它的名称与引用变量的 C++ 概念无关。相反,该术语意味着我们维护对一个对象的所有“拥有引用”的计数,并在该计数变为零时删除该对象。
引用计数 - 让我们使用一个比喻。
你有一只耳朵。你希望它在某个时候回来。
你得到一群人指着你的耳朵。他们一指,你就数他们。
当数字变为零时 - 它只是你的,你可以随心所欲地使用它。
即把它从等式中取出(将它释放回内存)。
顺便提一句。圆形的东西很难发现。