String淺拷貝 引用計數

2021-07-11 05:54:35 字數 607 閱讀 4682

當類裡面有指標物件時,進行簡單賦值的淺拷貝,兩個物件指向同一塊記憶體,存在崩潰的問題!為了解決這個問題,我們可以採用引用計數。

在引用計數中,每乙個物件負責維護物件所有引用的計數值。當乙個新的引用指向物件時,引用計數器就遞增,當去掉乙個引用時,引用計數就遞減。當引用計數到零時,該物件就將釋放占有的資源。

#include#include#includeusing namespace std;

class string

string(string& s)

:_str(s._str)

string& operator=(const string&s)

return*this;

} ~string()

private:

void _release() }

friend ostream& operator<<(ostream& os, const string& s)

private:

char* _str;

int _getrefcount;//引用計數

};void test1()

int main()

String類的引用計數的淺拷貝

引用計數的淺拷貝的兩種實現方式 方法一 string類中採用char str和int prefcount 但利用指標 prefcount重新開闢空間存放引用計數,會產生大量記憶體碎片。如下 includeusing namespace std includeclass string string c...

C 拷貝 引用計數

通常,我們會按如下方式書寫拷貝建構函式 class lif 預設建構函式 lif const lif l lif l.lif 拷貝建構函式 private int lif 這是正確的。但是,如果資料成員包含指標型別的話,這種寫法就很危險了。class lif 為lif動態分配記憶體 lif cons...

string類的寫時拷貝與引用計數

由於淺拷貝使多個物件共用一塊記憶體位址,呼叫析構函式時導致一塊記憶體被多次釋放,導致程式奔潰。實現string類的時候通常顯示的定義拷貝建構函式和運算子過載函式。由於釋放記憶體空間,開闢記憶體空間時花費時間,因此,在我們不需要寫,只是讀的時候就可以不用新開闢記憶體空間,就用淺拷貝的方式建立物件,當我...