作者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/cn.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