深度探索c++对象模型
文章平均质量分 74
ら、缘未尽
大二小趴菜
展开
-
6.程序转化语义
我们写的代码会被编译器拆分看编译器怎么拆分的。原创 2024-07-01 16:59:04 · 621 阅读 · 0 评论 -
5.拷贝构造函数
传统上,大家认为:如果我们没有定义一个自己的拷贝构造函数,编译器会帮助我们合成 一个拷贝构造函数。//成员变量初始化手法,比如int这种简单类型,直接就按值就拷贝过去了,编译器不需要合成拷贝构造函数的情况。//我们却发现mya1对象的一些成员变量值确实被拷贝到mya2中去,这是编译器内部的一些直接拷贝数据的实现手法,//比如类A中有类类型Ason成员变量assubobj,也会递归是去拷贝类Ason的每个成员变量。//我们自己也没有写类A的构造函数,编译器也没有帮助我们生成拷贝构造函数。原创 2024-07-01 16:56:40 · 223 阅读 · 0 评论 -
4.构造函数语义
当我们有自己的默认构造函数时,编译器会根据需要扩充我们自己写的构造函数代码,比如调用父类构造函数,给对象的虚函数指针赋值。导入:如果我们没定义任何构造函数,那么编译器就会为我们隐式自动定义一个默认的构造函数,我们称之为”合适的默认构造函数“虚基类:通过两个直接基类继承同一个简介基类,所以一般是三层,有爷爷Grand,有两个爹A,A2,有孙子C。但是真实情况是只有在必要的时候,编译器才会合成出来,而不是必然或者必须为我们合成的。(3)因为虚函数的存在,把类的虚函数表地址赋给对象的虚函数表指针。原创 2024-07-01 16:56:05 · 811 阅读 · 0 评论 -
3.this指针: :多重继承
cout << "B::B()的this指针是:" << this << endl;cout << "C::C()的this指针是:" << this << endl;cout << "B::B()的this指针是:" << this << endl;cout << "C::C()的this指针是:" << this << endl;cout <<"A::A()的this指针是:" << this << endl;cout <<"A::A()的this指针是:" << this << endl;原创 2024-07-01 16:55:21 · 241 阅读 · 0 评论 -
2.对象结构的发展和演化
虚函数表是基于类的,跟着类走的,跟对象无关”,这句话的意思是,虚函数表(vtable)是与类相关联的。这个表是在编译时期创建的,其中包含了类的虚函数的地址信息。其实因为虚函数的存在,导致系统往类对象中添加了一个指针,这个指针正好指向这个虚函数表,很多资料把这个指针叫vptr,这个vptr的值由系统在适当的时机(比如构造函数中通过增加额外的代码来给值)。(3)成员函数:不管静态的还是非静态,全部都保存在类对象之外,所以不管几个成员函数,不管是否是静态的成员函数,对象的sizeof的大小都是不增加的。原创 2024-07-01 16:54:42 · 841 阅读 · 0 评论 -
1.类对象所占用的空间
/sizeof(a) = 1,为什么?原创 2024-07-01 16:53:48 · 340 阅读 · 0 评论