1. 程式人生 > >C++中為什麼要將解構函式定義成虛擬函式

C++中為什麼要將解構函式定義成虛擬函式

      派生類的成員由兩部分組成,一部分是從基類那裡繼承而來,一部分是自己定義的。那麼在例項化物件的時候,首先利用基類建構函式去初始化從基類繼承而來的成員,再用派生類建構函式初始化自己定義的部分。

同時,不止建構函式派生類只負責自己的那部分,解構函式也是,所以派生類的解構函式會只析構自己的那部分,這時候如果基類的解構函式不是虛擬函式,則不能呼叫基類的解構函式析構從基類繼承來的那部分成員,所以就會出現只刪一半的現象,造成記憶體洩漏。

所以解構函式要定義成虛擬函式。