13 拷貝建構函式

2021-10-19 17:17:29 字數 1235 閱讀 4203

1.拷貝建構函式

//前面已有cstudent的建構函式

class

cstudent

//建構函式

//拷貝建構函式

cstudent

(cstudent& obj)

//cstudent(cstudent& obj) = delete;//禁用預設的拷貝建構函式

//cstudent(cstudnet& obj) = default;//使用預設的拷貝建構函式};

intmain()

2.拷貝建構函式與深拷貝和淺拷貝
先看乙個例子:

class

cstudent

//析構函式

~cstudent()

/*自定義的拷貝建構函式

cstudent(cstudent& obj)

*/private

:int m_nstuid;

char

* m_szname;};

intmain()

大家有沒有發現程式中存在問題

何時我們應該自己定義拷貝建構函式,何時我們應該採用系統預設的拷貝建構函式呢?
答:當物件中的成員函式存在一種需要分配的資源時,為了避免呼叫預設拷貝建構函式時的淺拷貝問題,造成析構時對資源空間的重複釋放,我們需要重寫拷貝建構函式或禁用

如何重寫拷貝建構函式?
class

cstudent

//析構函式

~cstudent()

//自定義的拷貝建構函式

cstudent

(cstudent& obj)

//然後將內容拷貝到新開闢的堆空間

memcpy

(this

->m_sznmae,obj.m_szname,

255)

;//淺拷貝如何做的:

//this->m_szname = obj.m_szname;

}private

:int m_nstuid;

char

* m_szname;};

intmain()

memcpy()函式介紹

深拷貝與淺拷貝的區別

拷貝建構函式,預設拷貝建構函式

拷貝建構函式,預設拷貝建構函式 1.c 的預設拷貝建構函式,從深度拷貝和淺拷貝說起 c 類的預設拷貝建構函式的弊端 c 類的中有兩個特殊的建構函式,1 無參建構函式,2 拷貝建構函式。它們的特殊之處在於 1 當類中沒有定義任何建構函式時,編譯器會預設提供乙個無參建構函式且其函式體為空 2 當類中沒有...

建構函式 拷貝建構函式

建構函式可以分為三類 1 不帶引數的建構函式 在函式體中對資料成員賦初值,這種方式使該類的每乙個物件都得到同一組初值 2 帶引數的建構函式 如果使用者希望對不同的物件賦不同的初值,可以採用帶引數的建構函式。在呼叫不同物件的建構函式時從外面將不同的資料傳遞給建構函式,以實現初始化 3 複製建構函式 建...

建構函式 拷貝建構函式

person person 引用就是指標常量 所以person p person const p,引用所以一旦初始化指向某個位址,就不能在改變了。為什麼前面還要加const,因為拷貝建構函式的目的就是將乙個物件的所有屬性拷貝到另外乙個物件,這個物件的屬性不變,加上const 相當於 const pe...