C++ 在設計 class 時,virtual destructor 會是個在設計時必須要謹慎考量的點 (特別是在 class 會被繼承以及有 dynamic binding 的狀況時), stack overflow 上或者 google "virtual destructor" 其實都可以找到相當多的文章說明為何需要 virtual destructor。不過其實大多數的文章會把重點放在 memory leak 上的問題,今天才發現原來這是 undefined behavior
標準上有這麼一句話
In the first alternative (delete object), if the static type of the object to be deleted is different from its dynamic type, the static type shall be a base class of the dynamic type of the object to be deleted and the static type shall have a virtual destructor or the behavior is undefined.換言之雖然確實是有問題,但如果是 undefined behavior 的話,我個人會認為要假設程式在此時不能正常運作,是個必須嚴格避免的狀況。
沒有留言:
張貼留言