为什么带vptr的对象长12个字节?

问题描述 投票:0回答:1
#include <iostream>

class B
{
    public:
    virtual void f() {std::cout<<"HI";}
    int x;
};
class A
{
    public:
    void f() {std::cout<<"HI";}
    int x;
};

int main () {
  A a;
  B b;
  std::cout<<sizeof(a)<<" "<<sizeof(b);

  return 0;
}

输出为

4 16 

我希望它长8个字节-vptr指针。但是剩下的4个字节又用来做什么呢?我发现很多forum posts(都是几年前的),人们讨论了带有vprt的类的对象长4​​或8个字节。我也检查了online C++ shell-输出是否相同。

c++ c++11 polymorphism virtual vptr
1个回答
1
投票

似乎指向虚拟函数的指针表的指针的大小为8个字节。因此,类B与8个字节的边界对齐,因为它有4个填充字节。

© www.soinside.com 2019 - 2024. All rights reserved.