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

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

vtable存储在哪里?过程的代码部分还是数据部分?

最佳答案

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

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

请注意,这都不是C++语言所强制执行的-实现可以根据需要以其他方式处理虚拟调度。但是,这是我熟悉的每个编译器都使用的实现。 Stan Lippman的书“在C++对象模型内部”描述了它如何很好地工作。

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

10-13 06:47