首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中每个类都有虚函数表吗

在C++中每个类都有虚函数表吗
EN

Stack Overflow用户
提问于 2012-02-28 14:00:57
回答 4查看 3.4K关注 0票数 3

在C++中每个类都有虚函数表吗?

我知道虚表是用于多态的。具有虚函数的类必须有v-table。但是如果类没有虚函数呢?或者如果类没有基类呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-28 14:03:11

C++的语言规范没有定义什么是"vtable“,也没有定义哪些类需要vtable。

编译器中的C++的特定实现通常使用vtable来实现虚方法。如果一个类没有虚方法(也没有带虚方法的超类),那么编译器可能会省略vtable。但是,请记住,这纯粹是编译器实现的决定,并不是标准所要求的。

票数 6
EN

Stack Overflow用户

发布于 2012-02-28 14:02:43

作为一个非标准的经验法则(vtables不是由标准规定的),它实际上适用于所有编译器:

只有具有虚拟成员函数和/或虚拟析构函数的类才有vtable。其他类则不是。这符合C++中“按量计费”的一般规则。

当然,这让您承担了一项重要的责任:您的类是否要以多态方式删除?也就是说,它会被用作公共基类并通过它被删除吗?然后将析构函数设为虚拟的。

票数 3
EN

Stack Overflow用户

发布于 2012-02-28 14:04:08

C++语言本身并没有讨论如何实现虚函数,例如,它可以使用vtables或任何其他机制。话虽如此,它通常是使用v-table实现的,只有当类包含虚拟函数时才会创建这个v-table。

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

https://stackoverflow.com/questions/9477145

复制
相关文章

相似问题

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