String類的引用計數的淺拷貝

2021-07-13 08:53:28 字數 1242 閱讀 7980

引用計數的淺拷貝的兩種實現方式

方法一:string類中採用char* _str和int* _prefcount;但利用指標

_prefcount重新開闢空間存放引用計數,會產生大量記憶體碎片。

**如下:

#includeusing namespace std;

#includeclass string

string(const string& s)

:_str(s._str)

,_prefcount(s._prefcount)

//運算子過載

string& operator=(const string& s)

_str = s._str;

_prefcount = s._prefcount;

++(*_prefcount);

return *this;

} ~string() }

int _getrefcount()

void put()

private:

char* _str;

int* _prefcount;

};void test()

int main()

方法二:類中只採用_str乙個變數,用開闢的前一塊空間存放引用計數。利用強制轉換前後偏移,獲取引用計數以及存放字串的位置。對於兩個或多個相同的字串,為了方便修改某字串,並不影響其他字串可以通過寫實拷貝來實現。

**如下:

#includeusing namespace std;

class string

string(const string& s)

:_str(s._str)

string& operator=(const string& s)

return *this;

} //寫實拷貝-----寫誰誰拷貝

char& operator(size_t index)

return _str[index];

} ~string()

int& _getrefcount(char* str)

void _release() }

void put()

private:

char* _str;

};void test()

int main()

本文出自 「scen」 部落格,請務必保留此出處

String淺拷貝 引用計數

當類裡面有指標物件時,進行簡單賦值的淺拷貝,兩個物件指向同一塊記憶體,存在崩潰的問題!為了解決這個問題,我們可以採用引用計數。在引用計數中,每乙個物件負責維護物件所有引用的計數值。當乙個新的引用指向物件時,引用計數器就遞增,當去掉乙個引用時,引用計數就遞減。當引用計數到零時,該物件就將釋放占有的資源...

引用計數型String類的簡單實現

利用 引用計數 和 寫時複製 這兩個特點來實現乙個字串類,為了更好地隱藏類的實現,避免出現下述情況 當對於內聯函式定義的改動,對於物件成員大小的改動等導致程式的重新編譯,我們可以的 結構如下 我們在程式中維護兩個不同的標頭檔案,在提供給使用者使用的那個公共標頭檔案中,只是告訴使用者我們定義了stri...

引用計數型String類的簡單實現

利用 引用計數 和 寫時複製 這兩個特點來實現乙個字串類,為了更好地隱藏類的實現,避免出現下述情況 當對於內聯函式定義的改動,對於物件成員大小的改動等導致程式的重新編譯,我們可以的 結構如下 我們在程式中維護兩個不同的標頭檔案,在提供給使用者使用的那個公共標頭檔案中,只是告訴使用者我們定義了stri...