本文內容取自於對狄泰學院 唐佐林老師 c++深度解析 課程的學習總結
兩個特殊的建構函式
無參建構函式
沒有引數的建構函式
拷貝建構函式
引數為const class_name& 的建構函式
無參建構函式
拷貝建構函式
程式設計實驗
特殊的建構函式
#include
class
test
;int
* test::
getp()
void test::
free()
test::
test()
test::
test
(int i)
int test::
geti()
int test::
getj()
intmain()
執行結果
分析執行結果,堆記憶體重複釋放,預設拷貝建構函式進行了物理拷貝,將變數的值和位址都進行了拷貝拷貝函式的意義這種預設拷貝建構函式的物理拷貝稱為淺拷貝。
淺拷貝
深拷貝
編譯器提供的拷貝建構函式只進行淺拷貝!
什麼時候需要進行深拷貝 ?
物件中有成員指代了系統中的資源
一般性原則
自定義拷貝建構函式,必然需要實現深拷貝!!!
我們對上面的實驗例程進行優化,增加自定義拷貝建構函式進行深拷貝
test::
test
(const test& t)
執行結果
執行結果,沒有重複釋放報錯,t1和t2的p指標位址不同,說明我們自定義的構造淺拷貝使得物件的物理狀態相同拷貝函式進行了深拷貝。
深拷貝使得物件的邏輯狀態相同
第19課 物件的構造(下)
1 無參建構函式 當類中沒有定義建構函式時,編譯器預設提供乙個無參建構函式,並且其函式體為空。2 拷貝建構函式 當類中沒有定義拷貝建構函式時,編譯器預設提供乙個拷貝建構函式,簡單的進行成員變數的值複製。1 include 2 3class test413 intgetj 1417 18 test c...
C 學習筆記 第19課 物件的構造(下)
拷貝建構函式 注意 編譯器提供的拷貝建構函式只進行淺拷貝成員指向的動態記憶體空間 成員開啟了外存中的檔案 成員使用了系統中的網路埠 問題引出 include class ctest void setj int ival ctest ctest const ctest t intgeti intget...
C 19 物件的構造(下)
兩個特殊的建構函式 無參建構函式 當類中沒有定義建構函式時,編譯器預設提供乙個無參建構函式,並且其函式體為空。拷貝建構函式 當類中沒有定義拷貝建構函式時,編譯器預設提供乙個建構函式,簡單的進行成員變數的值複製。面試題 class t 這裡面的其實裡面有隱藏的建構函式和拷貝建構函式 有乙個概念要理清 ...