目錄
一、引言
二、淺拷貝與深拷貝的基本概念
2.1 淺拷貝
2.2 深拷貝
在C++ 中, string 類的深淺拷貝有著重要的區別。
淺拷貝
深拷貝
string 類中的其他構造函數及操作
resize 構造
= 構造(賦值構造)
+ 構造(拼接構造)
cin 和 cin.get 的區別
三、C++中string類的默認行為
四、自定義字符串類并實現深淺拷貝
4.1 未重載拷貝構造函數和賦值運算符(默認淺拷貝)
4.2 實現深拷貝(重載拷貝構造函數和賦值運算符)
五、比較運算符的重載(> < >= <= == !=)
六、resize函數的實現
七、賦值運算符的深入探討
7.1 自賦值情況的處理
7.2 移動賦值運算符(C++11及以后)
八、 + 運算符的重載
一、引言
在C++編程中, string 是一個常用的類,用于處理字符串。在涉及對象的復制、傳遞等操作時,深拷貝和淺拷貝的概念至關重要。理解 string 的深淺拷貝機制,能夠幫助我們編寫出更健壯、高效且無內存錯誤的代碼。本文將深入探討 string 的深淺拷貝原理,并結合具體代碼示例進行詳細分析。
二、淺拷貝與深拷貝的基本概念
2.1 淺拷貝
淺拷貝是指在對象復制時,只復制對象中成員變量的值。如果成員變量是指針類型,淺拷貝僅僅復制指針的值(即地址),這就導致源對象和拷貝對象的指針指向同一塊內存區域。當其中一個對象釋放該內存時,另一個對象的指針就會變成懸空指針,進而引發程序崩潰或未定義行為。