天天看點

再說構造與析構,virtual析構函數

繼承:構造與析構

有Child類繼承于Parent類

那麼,當建立一個子類對象時:(編譯器預設運作)

子類對象構造時,先調用父類的構造函數,再調用子類的構造函數

子類對象析構時,先調用子類的析構函數,再調用父類的構造函數

當父類有多個構造函數,可以顯式的調用其中的一個構造函數

如果沒有顯式調用,則調用了父類的“預設構造函數”

當一個類被繼承時,應該将父類的析構函數聲明為virtual,否則會有潛在的問題

考慮以下場景:

如果析構函數沒有辨別為virtual,則有潛在的隐患,并有可能直接導緻程式崩潰,(資源沒有被釋放,并引申出一系列問題)

類的大小,與virtual關鍵字的影響

(1)類的大小由成員變量決定,(這struct的原理相同)

類的大小成員函數的個數無關,即使一個類有10000個成員函數,對它所占的記憶體空間是沒有影響的

(2)但是,如果有一個成員函數被聲明為virtual,那類的大小會有寫微的變化。(這個變化由編譯器決定,一般是增加了4個位元組)

介紹繼承關系中,父類的構造函數和析構函數将被調用

當一個類被别的類繼承時,應該将父類的析構函數聲明為virtual

(注:如果這個類在設計的時候,已經明确它不會被繼承,則不需要聲明為virtual)