[問題] 為何多型物件的解構子要用virtual?

作者: d630200x (DOGE)   2021-01-04 23:57:41
我對virtual的理解是將該函式宣告為可override
應該是類似對其產生function pointer,使得可以依據實際型態執行對應的function
但是我無法理解為何base class desturctor也需要宣告virtual
照理來說base與derived的刪除應該互不相關才對
derived先把自己刪除,base再刪除自己
為何變成指標後base不宣告virtual後derived就不會被執行了?
作者: loveme00835 (髮箍)   2021-01-05 00:12:00
這和你要不要透過 virtual function 來得到 dynamicpolymorphism 無直接關聯; 而是你會不會對指到 derived class 物件的 base class 指標呼叫解構子, 如果不會就沒必要這樣做https://isocpp.org/wiki/faq/virtual-functions#virtual-dtors呼叫的函式實體得在編譯時期就決定好, 這會取決於你呼叫時 this 指標型別以及引數型別 (如果有的話)也就是說, 即使你把解構子宣告成 virtual, 編譯器也還是會試著呼叫父類別的版本
作者: eye5002003 (下一夜)   2021-01-05 11:01:00
簡而言之,這樣做能確保解構順序,所以GCC也建議你加

Links booklink

Contact Us: admin [ a t ] ucptt.com