C 深拷貝與淺拷貝

2021-08-09 07:50:52 字數 819 閱讀 3362

在c++中,普通變數之間的複製是很簡單的,比如

int a = 3;

int b = a;

但是,對於類的物件之間的拷貝往往是相對複雜的,比如下面的例子。在這個例子中,在例項化類的物件s1時,系統呼叫建構函式,申請了一段記憶體,是正確的;但是在例項化物件s2時,系統呼叫的是拷貝建構函式,拷貝建構函式雖然複製了乙份建構函式的內容,但是s2申請的記憶體和s1申請的記憶體是同一塊記憶體,那麼在釋放記憶體時就會出現異常,如果物件s1先釋放記憶體,這是物件s2中的指標就是迷途指標了,會執行出錯。深拷貝和淺拷貝可以簡單理解為:如果乙個類擁有資源,當這個類的物件發生複製過程的時候,資源重新分配,這個過程就是深拷貝,反之,沒有重新分配資源,就是淺拷貝。

class student

//拷貝建構函式

student(const student &stu)

private:

string name;

int *p;

};int main()

那麼什麼是深拷貝呢?再看下面這段**,對於拷貝建構函式,我們重新申請記憶體,只將物件s1中申請記憶體中的內容拷貝進物件s2中,而兩個物件的記憶體並不是同一段記憶體,因此進行了物件間的深拷貝。

class student

//拷貝建構函式

student(const student &stu)

}private:

string name;

int *p;

};int main()

C 深拷貝 與 淺拷貝

最近在寫一些c 程式,遇到個問題,記憶體會出錯,查了一些材料,終於發現問題所在了,原來碰到了傳說中的深拷貝和淺拷貝問題了,檢視一些材料,現在對這個問題做個總結 在類定義中,預設是淺拷貝,即 位拷貝 用在基本類中或者一些沒有指標的自定義型別中沒有一點問題,但是當遇到含有指標變數的自定義型別的時候,就會...

C 淺拷貝與深拷貝

淺拷貝 shallow copy 指的是當物件的字段被拷貝的時候,字段應用的物件不會被拷貝。深拷貝是對物件例項當中的字段引用的物件也進行拷貝的一種方式。淺拷貝可以通過將類實現介面icloneable class myclass icloneable 舉個簡單的例項 using system usin...

c 深拷貝與淺拷貝

對於普通型別的物件來說,它們之間的複製是很簡單的,例如 int a 88 int b a 而類物件與普通物件不同,類物件內部結構一般較為複雜,存在各種成員變數。下面看乙個類物件拷貝的簡單例子。iostream using namespace std class cexample void show ...