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

2021-09-05 19:35:33 字數 2691 閱讀 6689

利用」

引用計數」和

」寫時複製

」這兩個特點來實現乙個字串類

,為了更好地隱藏類的實現

,避免出現下述情況

:當對於內聯函式定義的改動

,對於物件成員大小的改動等導致程式的重新編譯

,我們可以的**結構如下:

我們在程式中維護兩個不同的標頭檔案

,在提供給使用者使用的那個公共標頭檔案中

,只是告訴使用者我們定義了

string_ref

這個類,

並且在string

物件中用乙個指標指向它

#ifndef string_h

#define

string_h

#include

<

iostream

>

using

namespace

std;

#include

<

assert.h

>

class

string_ref;

//前向宣告**類

////

string類宣告

////

簡單的引用計數型字串類

class

string

;#endif

另乙個標頭檔案

string_priv.h

是乙個私有的標頭檔案

,我們並不需要將其分發給使用者

,它裡面包含了對

string_ref

類的完整宣告

: 其對應的實現檔案

string_priv.cpp:

#include

"string_priv.h"//

//string_ref實現區

//string_ref::string_ref(

const

char

*cp):count(

0),length(0)

string_ref::

~string_ref()

string_ref::string_ref(

const

string_ref

&rhs):count(0)

const

string_ref

&string_ref::

operator=(

const

string_ref

&rhs)

return

*this;}

char

string_ref::

operator

(int

index)

const

intstring_ref::length()

const

void

string_ref::addref()

void

string_ref::decref()

}void

string_ref::init(

const

char

*cp)

void

string_ref::release()

const

char

*string_ref::getdata()

const

////

string實現區

//string::string(

const

char

*cp):proxy(

newstring_ref(cp))

string::

~string()

string::string(

const

string

&s):proxy(s.proxy)

const

string

&string::

operator=(

const

string&s)

return

*this;}

void

string::tolower()

assert(proxy

->

count==1

);//

驗證自己是建立者

//小寫化

for(

char*cp

=proxy

->

data;

*cp;

++cp)

}char

string::

operator

(int

index)

const

intstring::length()

const

ostream

&operator

<<

(ostream

&out

,const

string

&rhs)

////

string_ref類宣告

//#include

"string.h

"class

string_ref

;

測試**: 

#include 

"string.h

"int

main()

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

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

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

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

String類的引用計數的淺拷貝

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