c++类得内存分配问题,面试的时候把我问倒了。
有一个父类A,子类B,请你画出他们在内存里面的分配,或者对象Aa;Bb;求详解。感激不尽啊!...
有一个父类A,子类B,请你画出他们在内存里面的分配,或者对象A a;B b;求详解。
感激不尽啊! 展开
感激不尽啊! 展开
4个回答
展开全部
在c++对象模型,非静态数据成员是影响占据内存大小的主要因素,所有实例共享一份静态数据,静态/非静态成员函数都不会影响实例内存的大小(是由实现固定的),若包含虚函数会占4字节无论有多少虚函。
所以,类实例的内存布局中只包含“成员数据”,并且只有用“虚函数”时(vptr)才会对内存布局有一丁点影响。
派生类在实例化时首先构造一个父类实例,在派生类销毁之后销毁。
子类b
{
父类a 部分
{
vptr
{
虚函数 // 此时虚表中的虚函数指向的是子类中的实现
子类虚函数的实现
<父类的函数并不包含在子类实例中>
}
父类数据成员
}
子类数据成员
}
所以,类实例的内存布局中只包含“成员数据”,并且只有用“虚函数”时(vptr)才会对内存布局有一丁点影响。
派生类在实例化时首先构造一个父类实例,在派生类销毁之后销毁。
子类b
{
父类a 部分
{
vptr
{
虚函数 // 此时虚表中的虚函数指向的是子类中的实现
子类虚函数的实现
<父类的函数并不包含在子类实例中>
}
父类数据成员
}
子类数据成员
}
展开全部
C++中先创建父类,在创建子类。其中父类空间在子类的开始位置。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
就是楼上说的这样。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
每个类成员一个空间,就没啥好画的了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询