C++ 應避免在 constructor 及 destructor 中 call virtual function

應避免在 constructor 跟 destructor 中 call virtual function,否則容易造成跟預期不符的行為(誤以為可以 call 到 derived class 的 virtual function)。

construct 到 base class 時,C++ 視該 object 為 base class object,derived class 的 virtual function 跟 member 都還沒建出來,所以 call 不到 derived class 的 virtual function。

反過來的 destruct 則是在 derived class destructor 跑完後,derived class 的東西都刪光光了,該 object 就被當作 base class object,所以在 base class destructor 裡 call virtual function 不會 call 到 derived class 的 virtual function。

除了要避免 constructor 跟 destructor call 到 virtual function,也要避免它們 call 的 function 再間接 call 到 virtual function。

Ref