![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
深入探索C++对象模型
学习笔记
Ch_zaqdt
这个作者很懒,什么都没留下…
展开
-
C++虚函数表深入探索(详细全面)
什么是虚函数表? 对于一个类来说,如果类中存在虚函数,那么该类的大小就会多4个字节,然而这4个字节就是一个指针的大小,这个指针指向虚函数表。所以,如果类中存在虚函数,那么编译器就会在类中生成一个指向虚函数表的指针,所有的虚函数都存在于这个表中,而所有的对象共享这一个虚函数表,虚函数表就可以理解为一个数组,每个单元用来存放虚函数的地址。 虚函数(Virtual ...原创 2020-03-13 00:17:48 · 1323 阅读 · 4 评论 -
C++初始化列表深入探索
必须要使用初始化列表的情况:1. 当初始化一个引用的成员2. 当初始化一个const的成员3. 当调用一个基类的对象(该类继承于基类),且基类有含有参数的构造函数时4. 当调用一个类的对象成员时,且该对象成员所在的类有含有参数的构造函数时 通过下面的代码,可以更详细的说明这四种情况:#include <iostream>using na...原创 2020-03-11 00:10:22 · 233 阅读 · 0 评论 -
C++深拷贝和浅拷贝的深入探索
先简单的说一下什么是深拷贝,什么是浅拷贝,对于浅拷贝来说其实就是按字节拷贝,对于深拷贝来说是先申请一块自己的内存空间,然后将内容拷贝过来。可以看下下面的代码:#include <iostream>using namespace std;class A {public: int m_i; A(int tmp) :m_i(tmp) {} A(cons...原创 2020-03-10 18:20:55 · 246 阅读 · 0 评论 -
C++程序转化语义
显示的初始化操作 建立一个类A,首先实例化一个对象xA x; 下面有三种显示的初始化操作(也就是说在定义的时候就进行初始化操作)A x1 = x;A x2(x);A x3 = (x); 那么对于我们来说,可以理解为在实例化对象的时候通过拷贝构造函数进行了拷贝操作,那么实际上在编译器层面看来,其实将上面的一句代码分成了两句。...原创 2020-03-10 01:21:57 · 380 阅读 · 5 评论 -
C++构造函数语义(合成默认构造函数)
在初学C++的时候,对于一个对象来说,如果我们没有去定义其默认构造函数,那么编译器就会为我们自动生成一个默认构造函数。但其实是不准确的,具体来说是编译器会在必要的时候来生成一个默认构造函数,那么这个编译器生成的默认构造函数称为合成默认构造函数。那么在以下四种情况中编译器才会生成一个合成默认构造函数:1. 含有类对象数据成员,该类对象类型有默认构造函数。2. 基类带有默...原创 2020-03-08 18:36:04 · 297 阅读 · 0 评论 -
C++类对象所占的内存空间
对于一个什么都没有定义的空类来说,它的大小不是0,而是1,因为实例化对象会获得一个独一无二的地址,也是为了区别该类的不同对象。在深度探索C++对象模型中是这样说的:那是被编译器插进去的一个char,使得这个class的不同实体(object)在内存中配置独一无二的地址。也就是说这个char是用来标识类的不同对象的。 如果在类中定义成员函数(包括静态成员函数),不...原创 2020-03-08 15:36:37 · 1128 阅读 · 0 评论