Re: [問題] 為何多型物件的解構子要用virtual?
※ 引述《d630200x (DOGE)》之銘言:
: 我對virtual的理解是將該函式宣告為可override
: 應該是類似對其產生function pointer,使得可以依據實際型態執行對應的function
: 但是我無法理解為何base class desturctor也需要宣告virtual
: 照理來說base與derived的刪除應該互不相關才對
: derived先把自己刪除,base再刪除自己
: 為何變成指標後base不宣告virtual後derived就不會被執行了?
: -----
: Sent from JPTT on my Asus ASUS_I01WD.
這是為了確保在多形狀況的 delete 可以呼叫到
正確的 derived class 的 destructor.
否則當你用 base class 的 pointer 來接受 new
來的 derived object 時,當你 delete 這個 object
時,編譯器會只呼叫到 base class 的 destructor
因為根據 base class 的宣告,它的 destructor
不是 virtual,不需要去 virtual table 裡面找。
因為難以用三言兩語說清楚,有興趣可以參考
inside C++ object model 的內容
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.204.7.185 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1609778849.A.BDA.html
※ 編輯: charleshu (123.204.7.185 臺灣), 01/05/2021 00:50:05
※ 編輯: charleshu (123.204.7.185 臺灣), 01/05/2021 00:52:49
→
01/05 01:44,
3年前
, 1F
01/05 01:44, 1F
→
01/05 01:44,
3年前
, 2F
01/05 01:44, 2F
→
01/05 01:44,
3年前
, 3F
01/05 01:44, 3F
→
01/05 01:44,
3年前
, 4F
01/05 01:44, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):