首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么虚拟类的析构函数不自动添加到vtable中?

为什么虚拟类的析构函数不自动添加到vtable中?
EN

Stack Overflow用户
提问于 2018-04-14 15:46:48
回答 1查看 184关注 0票数 1

当虚拟类B派生自虚拟基类A时,除非在A和B中显式声明虚拟析构函数,否则vtable中B的析构函数将指向A的析构函数。为什么?为什么B的vtable析构函数不自动指向B的析构函数而不必定义A和B虚拟析构函数?

编辑:意识到如果没有使A的析构函数是虚拟的,B的析构函数甚至不在vtable中,所以当调用A的析构函数时,它只是直接调用A的析构函数。我的问题没有意义。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-14 15:52:20

C++的工作原则是“不为不使用的东西付费”。强制任何具有任何虚拟函数的类的析构函数都是虚拟的,即使该类的客户端从未从多形性(即通过基本指针)删除该类的对象,这是一个非零成本( vtable中的插槽,删除需要虚拟函数调用的对象)。因此,C++在没有显式指令的情况下不会这样做。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49833252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档