引用計數的淺拷貝的兩種實現方式
方法一:string類中採用char* _str和int* _prefcount;但利用指標
_prefcount重新開闢空間存放引用計數,會產生大量記憶體碎片。
**如下:
方法二:類中只採用_str乙個變數,用開闢的前一塊空間存放引用計數。利用強制轉換前後偏移,獲取引用計數以及存放字串的位置。對於兩個或多個相同的字串,為了方便修改某字串,並不影響其他字串可以通過寫實拷貝來實現。#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()
**如下:
本文出自 「scen」 部落格,請務必保留此出處#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()
String淺拷貝 引用計數
當類裡面有指標物件時,進行簡單賦值的淺拷貝,兩個物件指向同一塊記憶體,存在崩潰的問題!為了解決這個問題,我們可以採用引用計數。在引用計數中,每乙個物件負責維護物件所有引用的計數值。當乙個新的引用指向物件時,引用計數器就遞增,當去掉乙個引用時,引用計數就遞減。當引用計數到零時,該物件就將釋放占有的資源...
引用計數型String類的簡單實現
利用 引用計數 和 寫時複製 這兩個特點來實現乙個字串類,為了更好地隱藏類的實現,避免出現下述情況 當對於內聯函式定義的改動,對於物件成員大小的改動等導致程式的重新編譯,我們可以的 結構如下 我們在程式中維護兩個不同的標頭檔案,在提供給使用者使用的那個公共標頭檔案中,只是告訴使用者我們定義了stri...
引用計數型String類的簡單實現
利用 引用計數 和 寫時複製 這兩個特點來實現乙個字串類,為了更好地隱藏類的實現,避免出現下述情況 當對於內聯函式定義的改動,對於物件成員大小的改動等導致程式的重新編譯,我們可以的 結構如下 我們在程式中維護兩個不同的標頭檔案,在提供給使用者使用的那個公共標頭檔案中,只是告訴使用者我們定義了stri...