引用计数学习

引用计数是这样一个技巧,它允许多个有相同值的对象共享这个值的实现。

这个技巧有两个常用动机。第一个是简化跟踪堆中的对象的过程。一旦一个对象通过调用new被分配出来,最要紧的就是记录谁拥有这个对象,因为其所有者--并且只有其所有者--负责对这个对象调用delete。但是,所有权可以被从一个对象传递到另外一个对象(例如通过传递指针型参数),所以跟踪一个对象的所有权是很困难的。象auto_ptr(见Item M9)这样的类可以帮助我们,但经验显示大部分程序还不能正确地得到这样的类。引用计数可以免除跟踪对象所有权的担子,因为当使用引用计数后,对象自己拥有自己。当没人再使用它时,它自己自动销毁自己。因此,引用计数是个简单的垃圾回收体系。

    第二个动机是由于一个简单的常识。如果很多对象有相同的值,将这个值存储多次是很无聊的。更好的办法是让所有的对象共享这个值的实现。这么做不但节省内存,而且可以使得程序运行更快,因为不需要构造和析构这个值的拷贝。

 

    为了让引用计数的方案有通用性,我们可以实现一个基类:RefCounted,这个类主要保存了一个整数,用来存储该对象被引用的次数。所有需要引用计数的类对象都需要从此类派生。

    然后再定义一个引用计数的操作类:template <typename T> class RefPtr 。这样对类型T的指针就可以进行赋值或拷贝操作。注意T必须是RefCounted的派生类。

你可能感兴趣的:(delete,存储,Class)