c++对象模型

发布时间:2023年12月28日

对于创建一个类,需要多大的内存?

这其实是在考虑c++的对象的布局,在某本c++名著中,作者为了说明这一点,引入了几种模式,让我们主动思考,如果布局显得简单又高效。这些引入略过,直接进入主题。

1.一个类应该有哪些成员?

(1).静态数据成员

(2).非静态数据成员

(3).静态成员函数

(4).非静态成员函数

(5).虚函数

2.布局.

(1).静态数据成员和静态成员函数和成员函数全都不在类的内部,它们被放置在其他地方。只有普通数据成员和虚函数表存在于类的布局之中。

(2).虚函数表在每一个对象中都存在,由应该虚指针指向它,这个指针的设定和重置是由constrcut,destructor,copy assignment完成。

案例:

class A{

??????? int a;

??????? char b;

??????? static float pi;

??????? virtual void fun1();

??????? virtual void fun2();

??????? void fun3();

??????? static void fun4();

??

};

这个类多大?

假设一个指针4个字节

答案是4+4+4 = 12;char虽然只要1个字节,但是需要考虑字节对齐。

a占4个,b占4个,virtual 指针占4个(或者8个,看计算机的情况)

看到这里你可能想知道虚指针是如果使用虚函数表索引函数的吧,但是一个主题只讲一件事就行了。

3.继承

我在前面的博客中写过不少c++的问题,其中提到多重继承,虚拟继承时,不管父类被继承多少次,在子类中的父类,其实都是同一个父类实例,也就是虚拟继承时,父类只有一份实例。子类继承了父类之后,它的内存和父类有重合,并且根据自己的数据成员有所扩展。

关于继承所需要注意的地方前面也写过了。

文章来源:https://blog.csdn.net/weixin_42581560/article/details/135190005
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。