类的大小 - C++

fgf*_*jhm 1 c++ virtual function sizeof

我有关于对象大小的以下代码:

class A 
{ 
public: 
    int _i; 
    virtual int getI () = 0; 
    int setI (int i); 
}; 
class B : public A 
{ 
public: 
    int getI (); 
    virtual int setI (int i); 
}; 

class C : public B 
{ 
public: 
    int _i; 
    int getI (); 
    int setI (int i); 
}; 

int main () 
{ 
    B b; 
    C c; 
} 
Run Code Online (Sandbox Code Playgroud)

为什么C c的大小; 是12?尺寸计算中包含哪些部分?

ham*_*ene 8

sizeof(int A::_i) + sizeof(int C::_i) + sizeof(pointer to virtual table)

所有这些部分的大小都取决于实现,在您的情况下,每个部分的大小为4.


Jam*_*nze 5

几乎任何类的大小都取决于实现,但我猜你是在一台32位机器上,而C类包含一个4字节 vptr和两个四字节int(A::_iC::_i).