字串是我們在編寫程式的時候經常用的到的。c++庫已經幫我們實現了乙個功能更加強大的字串類string,我們要去了解它是怎麼實現的。
只要是涉及到 string類的地方多少都會涉及到深淺拷貝的問題。在c++中,在用乙個物件初始化另乙個物件時,只複製了成員,並沒有複製資源,使兩個物件同時指向了同一資源的複製方式稱為淺複製。
深拷貝是將指向內容複製到給當前物件新分配的緩衝區中的一種複製方式。
下面就是自己實現的深拷貝string類:
#include#includeusing namespace std;
class string
//深拷貝
string(const string& s)
:_str(new char[strlen(s._str)+1])
string& operator=(const string& s)
return *this;
} 現**法
//string(const string& s)
// :_str(null)
// //string& operator=(const string& s)
// // return *this;
//}private:
char* _str;
};
關於string類的深淺拷貝問題
首先,先看一下下面的 會出現什麼問題?class string else string string const string s data s.data private char data void test 上面的程式會奔潰,讓我們來分析原因 這就是所謂的淺拷貝,也稱位拷貝,編譯器只是直接將指標...
String類與深淺拷貝
1 概念 被複製物件的所有變數都含有與原來的物件相同的值,而所有的對其他物件的引用仍然指向原來的物件。換言之,淺拷貝僅僅複製所考慮的物件,而不是複製它所引用的物件。2 舉例 class string else string const string s string operator const s...
面試題一 string類的深淺拷貝
pragma once include using namespace std 淺拷貝 析構物件時會出錯 class cmystring else 拷貝建構函式 cmystring const cmystring str m pdata null 析構函式 cmystring 賦值運算子過載 cmy...