深拷貝 String類的實現

2021-08-01 08:00:32 字數 1440 閱讀 4823

首先我們先來看看深淺拷貝的區別:

淺拷貝是指將物件中的數值型別的字段拷貝到新的物件中,而物件中的引用型字段則指複製它的乙個引用到目標物件。如果改變目標物件 中引用型字段的值他將反映在原是物件中,也就是說原始物件中對應的字段也會發生變化。深拷貝與淺拷貝不同的是對於引用的處理,深拷貝將會在新物件中建立一 個新的和原是物件中對應字段相同(內容相同)的字段,也就是說這個引用和原是物件的引用是不同的,我們在改變新物件中的這個欄位的時候是不會影響到原始對 象中對應欄位的內容。

**如下:

[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類)

所謂淺拷貝,指的是在物件複製時,只是對物件中的資料成員進行簡單的複製,預設拷貝建構函式執行的也是淺拷貝。簡單的說,淺拷貝就是值傳遞,將源空間裡面的內容複製到目標空間中。存在缺陷 多個指標可能共用管理一塊記憶體空間,在釋放時,導致對一塊空間的多次釋放,造成記憶體洩露。在 深拷貝 的情況下,對於物件中動...