C++类的大小

nur*_*bha 10 c++ class object sizeof

这是打印不同类的大小的代码

#include <iostream>

using namespace std;

class EmptyClass
{    
};

class AbstractClass
{
  public: 
          virtual void funcOne() = 0;
          virtual void funcTwo() = 0;
};

class NotAbstrClass
{
  public: int virtFunc( int );
};

class MixClass
{
  public:
          virtual void clFunc( int );
          static int i;
          int j;
};

int main()
{
    // Print size of class or class objects
    cout<<"Size of empty class: "<< sizeof(EmptyClass)<<endl;          
    cout<<"Size of Abstract class :"<< sizeof(AbstractClass)<<endl;
    cout<<"Size of Non Abstract class: "<< sizeof(NotAbstrClass)<<endl;
    cout<<"Size of Mix class: "<< sizeof(MixClass)<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

C++ 11编译器上的程序输出是

Size of empty class: 1
Size of Abstract class :4
Size of Non Abstract class: 1
Size of Mix class: 8
Run Code Online (Sandbox Code Playgroud)

我理解为什么Empty类的大小为1 ,空类对象的大小.对于抽象类,该对象存储用于实现虚函数调用机制的指针.但是其他类对象(NotAbstrClass和MixClass)的大小呢?

Pra*_*ian 7

NotAbstrClass没有数据成员,因此它也是一个空类。由于类的大小不能为零,因此您将获得与 相同的待遇EmptyClass

MixClass有一个虚函数和 1 个非静态数据成员。vptr在您的平台上,这些 (和)似乎都int占用 4 个字节,因此大小为 8 个字节。


Mar*_*ius 1

当我们谈论位大小时,NotAbstrClass 就像一个空类,因为它没有数据。MixClass有一个虚函数指针(在32位机器上是4个字节)和一个int(也是4个字节)。