1、引用计数这项技术,是为了让等值对象对象共享同一实体。此技术的发展有两个动机:a、记录堆上分配的对象,是垃圾回收机制的简单原理;b、节省内存,多个对象具有相同的值,存储多次很笨。速度更快,等值对象避免了对象复制,也就减少了构造和析构。

2、考虑,基于引用计数的String,String类中有个StringValue指针,stringValue包含char指针data和引用计数refCount。注意,refCount属于StringValue,不应该属于String,否则要有多个引用计数副本,还要保持同步。

3、考虑下面的问题,多个String共享同一个StringValue,如果只是读取操作,没问题。如果是写操作,修改其中一个String,我们期望其他的String不变。怎么办?
  这种情况下,不能再共享了。必须构造出一个副本出来,修改副本,其他的String仍然共享。这就是Copy-On-Write,写时才复制。这也是缓式评估的一个例子。
  问题又来了,对于String的操作[],如何区分读还是写呢?
  使用代理类,CharProxy,copy赋值是写操作,隐式类型转换操作符是读操作。

4、还有一个问题,那就是先读取String的字符,取地址,在后面再去修改字符。这种情况下,检测不出来。该怎么呢?
默认情况下,StringValue是可以共享的,一旦取出其中的字符,StringValue标记是不能共享的,复制的时候必须深复制。

5、考虑代码复用,可以产生一个父类RCObject。

6、引用计数技术,本身需要付出一些代价。它的使用场景是:相对多的对象共享相当少的实值,对象实值构造析构成本大。

最新文章

  1. VSS 的修复和扫描
  2. Ms sql将首字母大写
  3. [Linux] 孤儿进程与僵尸进程[总结]
  4. SQL中distinct的用法(转自博主:Rain Man)
  5. 为什么要使用jQuery?
  6. Wordpress 网站搭建及性能监控方法详解!
  7. debian修改系统语言为英文
  8. STL 源代码剖析 算法 stl_algo.h -- random_shuffle
  9. django-xadmin隐藏菜单不显示
  10. 纯css去实现loading动画效果图
  11. 【CJOJ1167】【洛谷1894】[USACO4.2]完美的牛栏
  12. 数据库4m10d作业
  13. mybatis入门系列二之输入与输出参数
  14. Java链接MySQL数据库的用配置文件和不用配置文件的代码
  15. redis学习——redis应用场景
  16. asp.net core自定义模型验证——前端验证
  17. Codeforces 781C Underground Lab
  18. hdu-3671-tarjin/割点方案
  19. linux 如何运行rpm
  20. 第2课 类型推导(2)_decltype关键字

热门文章

  1. As3 常用日期工具
  2. Python自动单元测试框架
  3. [转]LoadRunner参数化详解
  4. (转载)OC学习篇之---Foundation框架中的其他类(NSNumber,NSDate,NSExcetion)
  5. miracast 协议wifi display
  6. 使用android SpannableStringBuilder实现图文混排
  7. UltraEdit中文乱码的解决方法
  8. 指令式Callback,函数式Promise:对node.js的一声叹息
  9. pthread_cond_wait 信号量丢失
  10. JQuery实现的动态Table(转)