c++对象模型
2023-12-28 14:34:25
对于创建一个类,需要多大的内存?
这其实是在考虑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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!