欢迎来到入门教程网!

C语言

当前位置:主页 > 软件编程 > C语言 >

C++空类及没有成员变量的类的大小实例分析

来源:本站原创|时间:2020-01-10|栏目:C语言|点击:

众所周知的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)。

上一篇:C++指向函数的指针实例解析

栏    目:C语言

下一篇:C++读取INI配置文件类实例详解

本文标题:C++空类及没有成员变量的类的大小实例分析

本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/3622.html

网页制作CMS教程网络编程软件编程脚本语言数据库服务器

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:835971066 | 邮箱:835971066#qq.com(#换成@)

Copyright © 2002-2020 脚本教程网 版权所有