C 學習筆記 第19課 物件的構造(下)

2021-10-08 08:12:47 字數 2187 閱讀 7636

拷貝建構函式

注意:編譯器提供的拷貝建構函式只進行淺拷貝成員指向的動態記憶體空間

成員開啟了外存中的檔案

成員使用了系統中的網路埠

問題引出:

#include

class ctest

void

setj

(int ival)

ctest()

ctest

(const ctest& t)

intgeti()

intgetj()

int*

getp()

};intmain()

由結果可知,當進行指標進行拷貝構造時指標的位址一樣,那麼我們在釋放t的p位址空間時必然會釋放t1的p位址空間,產生錯誤

解決:進行深拷貝:深入到對應的堆空間的值進行拷貝

#include

using namespace std;

class ctest

void

setj

(int ival)

ctest()

ctest

(const ctest& t)

intgeti()

intgetj()

int*

getp()

~ctest()

};intmain()

結果:t.i =

10,t.j =

20,t.p =

00dc58c0

t1.i =

10,t1.j =

20,t1.p =

00dc58f0

~ctest()

~ctest

()

自定義拷貝建構函式,必然需要實現深拷貝

第19課 物件的構造下

本文內容取自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 兩個特殊的建構函式 無參建構函式 沒有引數的建構函式 拷貝建構函式 引數為const class name 的建構函式 無參建構函式 拷貝建構函式 程式設計實驗 特殊的建構函式 include class test int test...

第19課 物件的構造(下)

1 無參建構函式 當類中沒有定義建構函式時,編譯器預設提供乙個無參建構函式,並且其函式體為空。2 拷貝建構函式 當類中沒有定義拷貝建構函式時,編譯器預設提供乙個拷貝建構函式,簡單的進行成員變數的值複製。1 include 2 3class test413 intgetj 1417 18 test c...

C 學習筆記 第21課 物件的構造順序

在上一節中我們學習了初始化列表的使用,初始化列表的初始化順序與變數的宣告順序一致,而在c 中類可以定義多個物件,這些物件的構造順序是怎麼樣的呢?當程式執行流到達物件定義的語句時進行構造 include using namespace std class testi intmain 結果 1 23 i...