空的虚拟表可以存在吗?

Aqu*_*irl 3 c++ virtual vtable

#include <iostream>
using namespace std;

class Z
{
public:
    int a;
    virtual void x () {}
};

class Y : public Z
{
public:
    int a;
};

int main() 
{
    cout << "\nZ: "  << sizeof (Z);
    cout << "\nY: "  << sizeof (Y);
} 
Run Code Online (Sandbox Code Playgroud)

因为Y继承了Z,所以也会有虚表。美好的。但是,它没有任何虚函数,那么 Y 的虚表的内容是什么?
会空吗?

NPE*_*NPE 5

这完全取决于编译器。当我强制实例化Yand 时Zg++ 4.4.5会为和生成两个不同的虚拟表YZ它们具有相同的大小。

两个表都指向相同x()但指向不同的typeinfo结构:

;=== Z's virtual table ===
_ZTV1Z:
        .quad   0
        .quad   _ZTI1Z     ; Z's type info
        .quad   _ZN1Z5xEv  ; x()

_ZTI1Z:
        ; Z's type info (omitted for brevity)

;=== Y's virtual table ===
_ZTV1Y:
        .quad   0
        .quad   _ZTI1Y     ; Y's type info
        .quad   _ZN1Z5xEv  ; x()

_ZTI1Y:
        ; Y's type info (omitted for brevity)
Run Code Online (Sandbox Code Playgroud)