[问题] 为何多型物件的解构子要用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