首先我們先來看看深淺拷貝的區別:
淺拷貝是指將物件中的數值型別的字段拷貝到新的物件中,而物件中的引用型字段則指複製它的乙個引用到目標物件。如果改變目標物件 中引用型字段的值他將反映在原是物件中,也就是說原始物件中對應的字段也會發生變化。深拷貝與淺拷貝不同的是對於引用的處理,深拷貝將會在新物件中建立一 個新的和原是物件中對應字段相同(內容相同)的字段,也就是說這個引用和原是物件的引用是不同的,我們在改變新物件中的這個欄位的時候是不會影響到原始對 象中對應欄位的內容。
**如下:
[cpp]
view plain
copy
"font-size:18px;"
>#include
#include
using
namespace
std;
class
string
~string() //析構
} string(const
string &s)
//拷貝構造
:_str(new
char
[strlen(s._str) + 1])
const
char
*c_str()
const
//獲取c風格的字元指標
string& operator=(string s) //賦值運算子過載
char
operator(
intsz)
//的過載
string& operator+=(const
string& s)
//+=過載
size_t
size()
const
void
pushback(
char
c)
//尾插
string& insert(size_t
pos,
const
char
*str)
//指定位置插入
strcpy(_str+pos,tmp);
return
*this
; }
void
checkcapacity(
intsz)
//檢測容量是否夠用,不夠則重新開闢
} private
: char
* _str;
int_sz;
int_capacity;
};
ostream& operator<<(ostream& os, const
string& s)
//輸出運算子過載
void
test()
intmain()
String類,淺拷貝,深拷貝
想要使用c 中的類那麼必須要有它的標頭檔案,include 首先來看下面乙個 這個程式很簡單,但是如果有乙個空指標呢?那麼就需要判斷了,並且用預設值把有引數的string和沒有引數的string合併在一起,那這個程式只需要做下面的改變 既然你的建構函式開闢了一段空間,那麼就需要釋放掉,此時就需要析構...
String類之 深拷貝
上篇部落格我們說淺拷貝存在同一塊資源被多次釋放的問題,那麼這篇部落格就是給淺拷貝擦屁股,解決它遺留下來的問題。解決這個問題,我們可以考慮單獨給 s2 開闢一塊空間,只將 s1 裡的內容拷貝到 s2。看一看我們 是怎麼實現的吧 class string else 普通版版本 string const ...
C 深拷貝與淺拷貝(實現String類)
所謂淺拷貝,指的是在物件複製時,只是對物件中的資料成員進行簡單的複製,預設拷貝建構函式執行的也是淺拷貝。簡單的說,淺拷貝就是值傳遞,將源空間裡面的內容複製到目標空間中。存在缺陷 多個指標可能共用管理一塊記憶體空間,在釋放時,導致對一塊空間的多次釋放,造成記憶體洩露。在 深拷貝 的情況下,對於物件中動...