设为首页 加入收藏

TOP

C++空类以及没有成员变量
2014-07-19 23:03:36 来源: 作者: 【 】 浏览:74
Tags:空类 以及 没有 成员 变量

  关于C++中空类的大小为1,我们大家都有所了解,但是除了空类之外的其他一些没有成员变量的类的大小,还是有很多不明之处的。

  我们来看如下一个例子:

  #include

  using namespace std;

  class a {};

  class b{};

  class c :public a{

  virtual void fun() = 0;

  };

  class d :public b, public c{};

  int main()

  {

  cout << "sizeof(a)" << sizeof(a) << endl;

  cout << "sizeof(b)" << sizeof(b) << endl;

  cout << "sizeof(c)" << sizeof(c) << endl;

  cout << "sizeof(d)" << sizeof(d) << endl;

  getchar();

  return 0;

  }

  程序执行的输出结果为:

  sizeof(a)=1

  sizeof(b)=1

  sizeof(c)=4

  sizeof(d)=8

  为什么会出现这种结果呢 初学者肯定会很烦恼是吗 类a,b明明是空类,它的大小应该为为0,为什么 编译器输出的结果为1呢 这就是我们刚才所说的实例化的原因(空类同样可以被实例化),每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址,所以a,b的大小为1。

  而类c是由类a派生而来,它里面有一个纯虚函数,由于有虚函数的原因,有一个指向虚函数表的指针(vptr,有多个虚函数仍然是只有一个指针),在32位的系统分配给指针的大小为4个字节,所以最后得到c类的大小为4。

  类d的大小更让初学者疑惑吧,类d是由类b,c派生而来的,它的大小应该为二者之和5,为什么却是8呢 这是因为为了提高实例在内存中的存取效率,内存中会有数据对齐,于是类的大小往往被调整到4字节的整数倍。并采取就近的法则,往大的方向取最近的倍数,就是该类的大小,所以类d的大小为8个字节(假如d由3个空类和c派生而来,仍然是8)。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇sizeof的作用解释类中与类之外 下一篇C++ map插入(insert)数据..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·CPython是什么?PyPy (2025-12-26 06:50:09)
·Python|如何安装seab (2025-12-26 06:50:06)
·python要学习数据分 (2025-12-26 06:50:03)
·每日一道面试题-多线 (2025-12-26 06:20:17)
·java项目中哪些地方 (2025-12-26 06:20:14)