class string1
string1(string1& s)
:_str(s._
str), _refcount(++s._refcount)
{}~string1()
string1& operator=(string1 s)
}private:
char* _
str;
int_refcount;
};
用這種方法進行寫時拷貝,對乙個物件進行析構 _refcount– 時,訪問不到其他相同物件的 _refcount , 只要進行拷貝或賦值,就會造成記憶體洩漏。
class
string2
;int string2::_refcount = 0;
當出現不同的物件時,就會出現錯誤,_refcount 是唯一的。
class string3
string3(string3& s)
string3& operator=(string3 s)
return *this;
}~string3()
}private:
char* _
str;
int* _refcount;
};
##隱含的 int 指標
在初始化 _str 時,在其前面多申請四位元組空間,存放 int 型變數作計數器
string的寫時拷貝分析
在本機器上呼叫sizeof string 的時候,答案為4 於是好奇之 typedef basic string string a string looks like this code rep m length basic string m capacity m dataplus m refcou...
C C 寫時拷貝
何為寫時拷貝?前面我說過深拷貝淺拷貝,今天我們來 一下寫時拷貝。深拷貝是補充了淺 拷貝的不足,寫時拷貝其實也 就是補充一點深拷貝的不 足。其實寫時拷貝的意思就是 當你讀 取到這個空間的時候,並不會開闢出乙個一 模一樣的空間出 來給你,當你真正需要拷貝的時候,那 麼他就會開闢出空間 給你。也就是拖延版...
c 寫時拷貝
在c 中乙個類有六個預設成員函式,其中拷貝建構函式分為淺拷貝和深拷貝 淺拷貝是一種值拷貝,深拷貝不僅是值拷貝,還要做其他處理 深淺拷貝的區別 由上圖可知當乙個拷貝構造乙個需動態開闢空間的物件時,用淺拷貝時會出現同一塊空間被釋放兩次,這樣顯然有問題,用深拷貝的話可以解決此問題,但當拷貝構造出來的物件,...