我來說明一下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看也有