引用計數 copy on write

2021-08-10 06:12:29 字數 431 閱讀 6332

拷貝通常分為值拷貝也叫淺拷貝和深拷貝,當拷貝方式為淺拷貝時就會有以下兩個問題:

(1)當需要調析構函式時,會出現同一塊空間被析構兩次的情況

(2)如果是對指標的淺拷貝,會讓兩個指標同時管理同一塊空間,當乙個指針對這塊空間進行修改時,會影響到另外乙個指標。

通過引用計數加寫時拷貝可以有效地解決這些問題。

引用計數即在建立空間時多開闢出一塊空間存放當前空間被引用的次數。寫時拷貝即當多個指標同時指向一塊空間時,如果沒有對這塊空間的內容進行修改,就只進行淺拷貝,當指標需要對空間進行修改時,才會進行建立空間,拷貝資料,要注意引用計數的改變。

string類寫時拷貝的兩種方案:

(1)開闢兩塊空間,一塊放內容,一塊放引用計數

(2)開闢一塊空間,在最開始放引用計數,後邊放內容。

自動引用計數

每當你產生乙個物件,arc分配一大塊控制項去儲存這個物件。除此之外,當乙個物件是不在需要,arc 將會收回這個例項物件所佔的空間。如果乙個物件的空間被釋放掉,但是你任然通過物件的引用呼叫方法或者屬性,你的程式將要崩潰。為了不讓物件被釋放掉 arc將會追蹤有多少屬性 常量 變數正在引用這個物件。只要有...

自動引用計數

使用弱引用解決迴圈強引用 如果兩個變數屬性都可以設定為nil,那麼就用弱引用來設定其中乙個屬性來解決迴圈強引用。class person weak var apartment apartment?deinit class apartment deinit var aperson person?per...

PHP 引用計數

引用計數以及是否是引用變數,乙個神奇的函式,檢視當前引用計數 1 2 xdebug debug zval a 以上例程會輸出 a refcount 1,is ref 0 new string 下面進入正式環節 a new string b a xdebug debug zval a 輸出 a ref...