Cpp 拷貝構造與拷貝賦值

2021-07-10 05:20:46 字數 537 閱讀 9238

如果乙個類包含指標形式的成員變數,系統提供的預設拷貝建構函式,只是複製了指標成員變數本身,而沒有複製該變數所指向的內容,這種拷貝方式被稱為淺拷貝。淺拷貝將導致不同物件間的資料共享,同時會在析構函式中引發」double free」異常。為此就必須自己定義乙個支援複製內容即深拷貝的拷貝建構函式。

類的預設拷貝賦值同樣對於基本型別成員變數按位元組複製,因此和預設拷貝建構函式一樣,是淺拷貝。為了得到深拷貝的賦值效果,就需要自己定義乙個支援深拷貝的拷貝賦值運算子函式。

1)防止自賦值

2)分配新資源

3)釋放舊資源

4)複製新內容

5)返回自引用

6)復用拷貝構造和析構

1)盡量避免是指標形式的成員變數;

2)盡量避免拷貝構造和拷貝賦值;

3)如果拷貝構造支援深拷貝,那麼拷貝賦值就也應該支援深拷貝,反之亦然。

4)處於具體原因,確實無法實現深拷貝的拷貝構造和拷貝賦值,可以將拷貝建構函式和拷貝賦值運算子函式宣告為私有函式,禁止使用者使用。

拷貝構造和拷貝賦值

注意指標型別成員變數的深拷貝問題 拷貝構造屬於定義,並賦值 拷貝賦值屬於已經定義,只是賦值。拷貝構造的深拷貝,因為如果提供了拷貝建構函式,則構造該物件時使用的是拷貝建構函式。在拷貝建構函式中只需要 分配新資源,拷貝新內容,返回自引用即可。但是在拷貝賦值函式中,如果存在指標成員變數一般在物件定義時已經...

拷貝建構函式與賦值建構函式

include stdafx.h include include using namespace std class a a a a 過載拷貝函式 a int id,char t name a char name a operator a a 注意 此處一定要返回物件的引用,否則返回後其值立即消失!...

拷貝建構函式與賦值建構函式

什麼時候用拷貝建構函式,和賦值建構函式 一 當用乙個已初始化過了的自定義類型別物件去初始化另乙個新構造的物件的時候,拷貝建構函式就會被自動呼叫。也就是說,當類的物件需要拷貝時,拷貝建構函式將會被呼叫。以下情況都會呼叫拷貝建構函式 乙個物件以值傳遞的方式傳入函式體 乙個物件以值傳遞的方式從函式返回 乙...