虚类的每个对象都有指向vtable的指针吗?
还是只有带虚函数的基类对象才有?
vtable 存储在哪里?进程的代码段还是数据段?
最佳答案
所有具有虚方法的类都将拥有一个由该类的所有对象共享的 vtable。
每个对象实例都有一个指向该 vtable 的指针(这就是找到 vtable 的方式),通常称为 vptr。编译器隐式生成代码来初始化构造函数中的vptr。
请注意,这些都不是 C++ 语言强制要求的——实现可以根据需要以其他方式处理虚拟调度。但是,这是我熟悉的每个编译器都使用的实现。 Stan Lippman 的书《深入了解 C++ 对象模型》描述了它是如何工作的。
关于c++ - 虚拟类的每个对象是否都有指向 vtable 的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/561624/