我来说明一下Reference Count是做什么的好了
假如果我有n笔资料但这n笔资料的内容是一样的话
我会占用 mem * n的空间
这无形中是一种浪费
于是我用另外一个方法指标
将这n笔资料通通指向 同一个地方
并用一个变数refCount纪录着一共有几笔资料共用这个地方
如果有另外一笔资料要新增到此处的话
一样把指标指过来,并且将refCount+1
相反的,如果有资料要变更或是移除的时候
把指标取消,并且refCount-1
如果refCount=0的时候,就将该处的记忆体位址释放出来避免占用
我的程式是纪录字串
那一处的程式码是
复制程式
因为s3变动到了,所以我必须将s3独立出来占用另外一块记忆体空间
所以原本的refCount-1,并且另外分配一个空间给s3
因为这些动作全部写在 = 的operator overloading function里头
所以,假如我只做了读取的动作,例如这样
复制程式
但是它仍然会去呼叫=的operator overloading
造成另外在开一个记忆体空间给s3使用
而且s3的refCount=1
错误就产生啦!!
因为其实s3跟之前的内容是一样的..但是他却占用了另外一组空间
至于哪里得知结果
将s3的refCount印出来就知道了
或是用debug看也有