nmvbxcz 2017-05-10 09:45 采纳率: 0%
浏览 1397

C++ sizeof类的大小问题

#include <iostream>
using namespace std;

class Base
{
public:
    int a;   //有这句话和没有这句话运行结果差距很大
    Base(){cout<<"Base-ctor"<<endl;}
    ~Base(){cout<<"Base-dtor"<<endl;}
    virtual void f(int) {cout<<"Base::f(int)"<<endl;}
    virtual void f(double){cout<<"Base::f(double)"<<endl;}
};

class Derived:virtual public Base
{
public:
    Derived(){cout<<"Derived-ctor"<<endl;}
    virtual void g(int){cout<<"Derived::g(int)"<<endl;}
};

int main(){
    cout<<sizeof(Base)<<endl;
    cout<<sizeof(Derived)<<endl;
}

不知道为什么有int和没用int完全不一样,没有int结果是8 8,有int是16 24,差距已经不是一个int的问题了

  • 写回答

2条回答 默认 最新

  • 关注

    没有int的话Base应该是4吧,Der也是4吧,Base是4的话比较好理解就是一个虚指针占4个字节内存,Der是4个可能是编译器的优化,把两个Der的表与Base虚表结合了,本身虚继承会产生多个虚指针,两个虚指针优化为一个。
    有int的话Base应该是8,Der会变成12,为什么会Der比Base多4个字节就是把虚表分开了,怕虚基类与继承类数据发生混乱,从而采取两个虚指针。可以多看看深入探索C++对象模型,把C++在内存中布局与虚函数讲的很清楚。

    评论

报告相同问题?