1.淺拷貝只是增加了乙個指標指向已經存在的記憶體。
2.深拷貝就是增加乙個指標並且申請乙個新的記憶體,使這個增加的指標指向這個新的記憶體。
3.採用深拷貝的情況下,釋放記憶體的時候就不會出現在淺拷貝時重複釋放同一記憶體的錯誤。
我列舉乙個例子來說吧:
你正在編寫c++中有時用到,操作符的過載。最能體現深層拷貝與淺層拷貝的,就是『=』的過載。
看下面乙個簡單的程式:
class string
string(){};
string& operator=(const string s)
private:
char *m_str;
};int main()
if(*this != s)
return *this;
}
這樣你就實現了深拷貝,原因是你為被賦值物件申請了乙個新的記憶體所以就是深拷貝。 C 淺拷貝和深拷貝
class test test const test t val new int t.val test private int val 現在定義兩個物件,test t1 9 test t2 t1 如果你不提供copy建構函式 注釋掉的那個 那麼t1和t2的成員 val指向同乙個物件,當析構的時候,同...
c 深拷貝和淺拷貝
深拷貝和淺拷貝 ca const ca c 就是我們自定義的拷貝建構函式。可見,拷貝建構函式是一種特別的建構函式,函式的名稱必須和類名稱一致,他的唯一的乙個引數是本型別的乙個引用變數,該引數是const型別,不可變的。例如 類x的拷貝建構函式的形式為x x x 當用乙個已初始化過了的自定義類型別物件...
c 深拷貝和淺拷貝
對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 88 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。iostream using namespace std class cexample void show ...