C++ Daily 《3》----建構函式可否是虛擬函式

L_J_SHOU發表於2014-04-28

C++ 中建構函式可否是虛擬函式?


絕不要!!

而且,在建構函式中呼叫虛擬函式也是不提倡的行為,因為會引發預想不到的結果。


因為,在 derived class 物件構造的過程中,首先呼叫的是基類的建構函式,等基類構造結束,才開始構造派生類的部分。

這個過程中,編譯器將該物件視為 基類,而非派生類(因為,派生類物件的專屬部分還未初始化!!!


所以,如果在建構函式中呼叫虛擬函式,虛擬函式呼叫的一定是基類的虛擬函式,物件的行為就如同是基類的物件一樣。

或者可以這麼說:這個時候,虛擬函式不再是 虛擬函式。。。


參考:Effective C++ 條款9: 絕不要在構造和析構過程中呼叫 virtual funcion

相關文章