看板 C_and_CPP 關於我們 聯絡資訊
我對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://www.ptt.cc/bbs/C_and_CPP/M.1609775865.A.92A.html
loveme00835: 這和你要不要透過 virtual function 來得到 dynamic 01/05 00:12
loveme00835: polymorphism 無直接關聯; 而是你會不會對指到 deriv 01/05 00:12
loveme00835: ed class 物件的 base class 指標呼叫解構子, 如果不 01/05 00:12
loveme00835: 會就沒必要這樣做 01/05 00:12
loveme00835: tual-dtors 01/05 00:12
loveme00835: 呼叫的函式實體得在編譯時期就決定好, 這會取決於你 01/05 00:17
loveme00835: 呼叫時 this 指標型別以及引數型別 (如果有的話) 01/05 00:17
loveme00835: 也就是說, 即使你把解構子宣告成 virtual, 編譯器也 01/05 00:24
loveme00835: 還是會試著呼叫父類別的版本 01/05 00:24
eye5002003: 簡而言之,這樣做能確保解構順序,所以GCC也建議你加 01/05 11:01