C++ Virtual Destructor
為有「多型」性質(即有 virtual function)的 base class 宣告 virtual destructor。
C++ 沒有定義 base class 的 destructor 是 non-virtual 時以 base class pointer 刪除 derived class 的 object 的行為。常出現的結果是只有 base class 部分的 memory 會被釋放、derived class 部分的不會釋放,這會造成「局部銷毀」物件的問題,memory 當然就沒 free 乾淨。
用 virtual destructor 可以解決上述問題,因為 virtual function 的性質會 call 到 derived class 的 destructor。
不過不是把所有 base class 的 destructor 宣告成 virtual 就好,非必要(沒有 virtual function)時不需要這麼宣告。
Ref
- 《Effective C++》