空class的size问题

来源:互联网 发布:达梦数据库公司上市 编辑:程序博客网 时间:2024/06/05 16:08

今天遇到一个问题:

<span style="font-family: Arial, Helvetica, sans-serif;">class A</span>
{public:A(){};~A(){};};

问:A a;cout<<sizeof(a)<<endl;输出为多少,我想当然的以为是4,上机一试,原来是1,编译器在执行A a;这行代码后需要,作出一个Class A的Object。并且这个Object的地址还是独一无二的,于是编译器就会给空类创建一个隐含的一个字节的空间。

#include <iostream>using namespace std;class A{public:A(){};~A(){};};class B:public  A{};class C:public virtual B{};class D:public virtual C{};<pre name="code" class="cpp">int main(){A a;B b;C c;D d;cout<<sizeof(a)<<endl;cout<<sizeof(b)<<endl;cout<<sizeof(c)<<endl;cout<<sizeof(d)<<endl;return 0;}


输出为:

1

1

4

8

虚函数产生额外的负担,如果派生类继承的第一个是基类,且该基类定义了虚函数地址表,则派生类就共享该表首址占用的存储单元。对于除前述情形以外的其他任何情形,派生类在处理完所有基类或虚基类后,根据派生类是否建立了虚函数地址表,确定是否为该表首址分配存储单元。

0 0