Reference Counting

0. 引用计数是什么?

在我的理解,引用计数是一种管理对象的机制,不需要对象的拥有者来操心什么时候释放,只要指向这个对象的数量变成0,就自动释放资源。这跟 Java 中的跟踪式垃圾回收机制比起来,效率高很多。 之前接触过 Win32 中的许多对象都是由引用计数管理的,就比如线程资源被创建出来以后,引用计数为2。线程资源被释放的条件是,线程函数退出 && 线程句柄被关闭。 Objective-C 中的对象也都是由引用计数管理的,这非常棒!~

1. 引用计数的实现

引用计数使用起来很方便,我们只需要定义一个引用计数的基类,所有需要用引用计数管理的类都继承这个类,在被管理对象被多一个强指针指向的时候就调用增加引用计数的方法,而当一个指针不再指向它就调用减少引用计数的方法。当引用计数为0的时候,就删除自己。 不过这样做会存在一些问题。就比如在函数调用的时候,对象会发生拷贝构造。函数的编写者和调用者就会产生一些歧义。调用者不知道编写者有没有在内部为它处理好引用计数的问题,编写者也不知道应不应该为调用者处理这个问题。 智能指针的出现就能很好地解决上述问题,和单纯使用引用计数基类而引发的一些问题。

2. 智能指针

智能指针是什么?其实智能指针类实现了一系列的操作符重载。你只需要把要管理的对象用智能指针给包起来,它会在你需要改变引用计数的时候,自动调用增加减少引用计数。对象拥有者永远不需要担心什么应该增加和减少引用计数,这很是方便,省心。

3. 总结

听过这样一句话:类的封装者,就应当把使用者当做傻子来看待。智能指针和引用计数的结合,能够很好地把使用者当做傻瓜来处理。

© Xinyu 2014 - 2024