拷貝建構函式
注意:編譯器提供的拷貝建構函式只進行淺拷貝
成員指向的動態記憶體空間
成員開啟了外存中的檔案
成員使用了系統中的網路埠
問題引出:
#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...