在C++中,每个类都有虚函数表吗?
我知道虚表是用于实现多态的。拥有虚函数的类必须有虚表。但是如果一个类没有虚函数呢?或者这个类没有基类呢?
在C++中,每个类都有虚函数表吗?
我知道虚表是用于实现多态的。拥有虚函数的类必须有虚表。但是如果一个类没有虚函数呢?或者这个类没有基类呢?
vptr
作为第一个成员(第一个声明的成员必须在偏移量0处),但这是我所看到的唯一问题。 - MSaltersmemcpy
,也可以通过中间字符缓冲区进行复制。如果此附加值以某种方式标识了类,则通过memcpy
复制它将基本上破坏目标类型,因为其特殊值将与类所期望的不匹配。如果绝对没有使用此值,那就没问题了,但这将与未命名填充完全相同。 - edA-qa mort-ora-yC++语言本身并不规定虚函数的实现方式,可以使用vtable或其他机制。但通常情况下,它是通过v-table来实现的,只有当类包含虚函数时才会创建这个v-table。
v-table 中保存函数的地址。这个表将保存在基类中定义的所有虚函数的函数地址。 根据实际对象类型,此地址会发生变化并调用确切的函数。
如果类没有继承任何具有虚函数的类,则不需要保存任何v-table。所有函数调用都将在编译时链接。