1. 程式人生 > >為什麼建構函式不能宣告為虛擬函式,解構函式可以

為什麼建構函式不能宣告為虛擬函式,解構函式可以

1. 如果我們定義了一個建構函式,編譯器就不會再為我們生成預設構造函數了。
2. 編譯器生成的解構函式是非虛的,除非是一個子類,其父類有個虛析構,此時的函式虛特性來自父類。
3. 有虛擬函式的類,幾乎可以確定要有個虛解構函式。
4. 如果一個類不可能是基類就不要申明解構函式為虛擬函式,虛擬函式是要耗費空間的。
5. 解構函式的異常退出會導致析構不完全,從而有記憶體洩露。最好是提供一個管理類,在管理類中提供一個方法來析構,呼叫者再根據這個方法的結果決定下一步的操作。
6. 在建構函式不要呼叫虛擬函式。在基類構造的時候,虛擬函式是非虛,不會走到派生類中,既是採用的靜態繫結。顯然的是:當我們構造一個子類的物件時,先呼叫基類的建構函式,構造子類中基類部分,子類還沒有構造,還沒有初始化,如果在基類的構造中呼叫虛擬函式,如果可以的話就是呼叫一個還沒有被初始化的物件,那是很危險的,所以C++中是不可以在構造父類物件部分的時候呼叫子類的虛擬函式實現。但是不是說你不可以那麼寫程式,你這麼寫,編譯器也不會報錯。只是你如果這麼寫的話編譯器不會給你呼叫子類的實現,而是還是呼叫基類的實現

7.