c++ - 虚拟类的每个对象是否都有指向 vtable 的指针?

标签 c++ inheritance vtable

虚类的每个对象都有指向vtable的指针吗?

还是只有带虚函数的基类对象才有?

vtable 存储在哪里?进程的代码段还是数据段?

最佳答案

所有具有虚方法的类都将拥有一个由该类的所有对象共享的 vtable。

每个对象实例都有一个指向该 vtable 的指针(这就是找到 vtable 的方式),通常称为 vptr。编译器隐式生成代码来初始化构造函数中的vptr。

请注意,这些都不是 C++ 语言强制要求的——实现可以根据需要以其他方式处理虚拟调度。但是,这是我熟悉的每个编译器都使用的实现。 Stan Lippman 的书《深入了解 C++ 对象模型》描述了它是如何工作的。

关于c++ - 虚拟类的每个对象是否都有指向 vtable 的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/561624/

相关文章:

c++ - std::shared_ptr如何释放?

c++ - 每像素照明黑点/奇怪的伪影

c++ - 如何打印以特定字符开头的单词数?

c++ - 什么是类(class)的 VTT?

c++ - 最佳坐标容器

javascript - 如何在Breezejs中查询和扩展多态导航集合属性

Scala 构造函数继承

html - 继承的字体大小在 Wordpress 中的段落内不起作用

c++ - 对 wxLog::DoLog 的 undefined reference 针对 wxWidget 3.0 构建 wxHaskell 时出错

C++:如何找出 v 表的布局/地址?