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