我有一个带有虚拟析构函数的类“基础”,因此有一个 VTable 和相应的 VTPR,以及一个从它派生的类:
class base {
public:
virtual ~base() {}
};
class der : base {};
main()
{
int a = sizeof(base); // = 4 , fine !
int b = sizeof(der); // = 4 too ?
}
现在,由于派生类也是虚拟的,它会有自己的 VPTR,但由于它还有一个基类的子对象,其中有一个 VPTR,所以“der”类的大小不应该是 8 个字节,即'der' 类的 VPTR 的大小 + 'base' 类的子对象的 VPTR 的大小?(当 sizeof(void*) = 4 bytes 时)。
所以基本上我的问题是:当类 'base' 的子对象是在 'der' 中制作时,它有一个单独的新 VPTR 吗?如果是这样,那么为什么在计算“der”的大小时没有添加它的大小?
有人可以澄清一下吗。