自寫string類的建構函式進化史

2021-07-30 18:46:36 字數 1725 閱讀 7800

string.h

淺拷貝:

class string

else

}string(const string& s)

string& operator=(string& s)

return *this;

}~string()

else

}private:

char* _pstr;

};void funtest()

int main()

淺拷貝造成兩個成員指向同乙個記憶體空間,在釋放時會呼叫兩次析構函式,另程式出錯

深拷貝:自寫拷貝構造,賦值建構函式實現深拷貝

class string

else

}string(const string& s) : _pstr(new

char[strlen(s._pstr) + 1])

string& operator=(const string& s)

return *this;

}~string()

}private:

char* _pstr;

};從int count ⇒ static count ⇒ int *count的思路分析:

由於int count使每個物件都 擁有,因此不能夠累加物件的目的

static count由於每一種物件的不同「111」,」222」, 需要不同的計數器,因此失敗;

int *count解決了此種問題

引用計數拷貝 == = 〉count 使用成員指標,成員指標即可以指向各個拷貝版本共同的計數器對應的記憶體塊,又可以各自指向不同的計數器記憶體塊

class string

else

}string(const string& s)

string& operator=(const string& s)

_pstr = s._pstr;

_pcount = s._pcount;

(*_pcount)++;

}return *this;

}~string()

_pcount = null;

_pstr = null;

}private:

char* _pstr;

int* _pcount;

};寫實拷貝

copy on write :

class string

else

getref() = 1;

}string(const string &s)

:_pstr(s._pstr)

string& operator=(const string &s)

_pstr = s._pstr;

++getref();

}return *this;

}char& operator(size_t index)

const

char& operator(size_t index)const

char& operator(size_t index)

return *(_pstr + index);

}~string()

}private:

char *_pstr;

int& getref()

};int main()

寫實拷貝的原理;

修改資料才會觸發copy - on - write,不修改就不會改

String類的各種建構函式

編寫類string 的建構函式 析構函式和賦值函式,已知類string 的原型為 class string string的普通建構函式 string string const char str 6分 else 拷貝建構函式 string string const string other 賦值函式 ...

String類的各種建構函式

編寫類string 的建構函式 析構函式和賦值函式,已知類string 的原型為 class string string的普通建構函式 string string const char str 6分 else 拷貝建構函式 string string const string other 賦值函式 ...

類string的建構函式 拷貝建構函式和析構函式

原文 引用 在這個帖子的基礎上稍微新增修改了點內容。string 類的原型如下 class string string string string string const char str else 當初始化串存在的時候,為m data申請同樣大小的空間存放該串 string string con...