作者d630200x (DOGE)
看板C_and_CPP
標題[問題] 為何多型物件的解構子要用virtual?
時間Mon Jan 4 23:57:41 2021
我對virtual的理解是將該函式宣告為可override
應該是類似對其產生function pointer,使得可以依據實際型態執行對應的function
但是我無法理解為何base class desturctor也需要宣告virtual
照理來說base與derived的刪除應該互不相關才對
derived先把自己刪除,base再刪除自己
為何變成指標後base不宣告virtual後derived就不會被執行了?
-----
Sent from JPTT on my Asus ASUS_I01WD.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.214.227.83 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1609775865.A.92A.html
1F:→ loveme00835: 這和你要不要透過 virtual function 來得到 dynamic 01/05 00:12
2F:→ loveme00835: polymorphism 無直接關聯; 而是你會不會對指到 deriv 01/05 00:12
3F:→ loveme00835: ed class 物件的 base class 指標呼叫解構子, 如果不 01/05 00:12
4F:→ loveme00835: 會就沒必要這樣做 01/05 00:12
6F:→ loveme00835: tual-dtors 01/05 00:12
7F:→ loveme00835: 呼叫的函式實體得在編譯時期就決定好, 這會取決於你 01/05 00:17
8F:→ loveme00835: 呼叫時 this 指標型別以及引數型別 (如果有的話) 01/05 00:17
9F:→ loveme00835: 也就是說, 即使你把解構子宣告成 virtual, 編譯器也 01/05 00:24
10F:→ loveme00835: 還是會試著呼叫父類別的版本 01/05 00:24
11F:推 eye5002003: 簡而言之,這樣做能確保解構順序,所以GCC也建議你加 01/05 11:01