字串類的寫時拷貝

2021-10-06 19:36:28 字數 744 閱讀 9390

/*

系統提供的,是深拷貝,不提供寫時拷貝,因為系統不知道你使用【】是寫還是讀,讀的話用寫時拷貝反倒是浪費空間。

*/#include

#include

#include

class string

string(const char * ptr)

string(const string& rhs)//淺拷貝

string& operator = (const string& rhs)//淺拷貝

mptr = rhs.mptr;

getref()++;

}return *this;

} char & operator (int index)//深拷貝

return mptr[index];

} ~string()//特殊處理

mptr = null;

}

private:

int& getref()

char * mptr;

};int main()

{string str1 = 「hello」;

string str2 = str1;

string str3 = str2;

string str4 = "world";

str2 = str4;

str1[0] = 'l';

return 0;

string類的寫時拷貝

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

c String類的寫時拷貝

在學習寫時拷貝前,我們先看乙個例子 class string string private char mptr int main 這段 中僅實現了建構函式和析構函式,在構造str1和str2時都開闢了新的記憶體空間,但對於str2,僅是單純的使用了它,並沒有對這塊空間進行操作,所以在這裡給str2重...

String類 (淺拷貝 深拷貝 寫時拷貝)

淺拷貝是指當物件的字段值被拷貝時,字段引用的物件不會被拷貝。例如,如果乙個物件有乙個指向字串的字段,並且我們對該物件做了乙個淺拷貝,那麼兩個物件將引用同乙個字串。存在問題 如果源程式中沒有顯示定義拷貝建構函式,在進行物件的拷貝時,將呼叫系統預設的拷貝建構函式,這就使得兩個物件指向了同一資源,而析構函...