2. 继承下的内存布局(非多态) 2.1 单继承的对象布局1、2情况一样,3的情况不一样,
3按照编译器的具体规则进行访问控制级别的内存分配,但是一般都是按照顺序的声明进行分配
2.2 多继承的对象布局一个类继承另外一个类,该类的内存布局为第二种,不是第一种,原因如下:
防止将p2赋值给p1的时候,将原先不存在数据的padding给变得有数据了
- 疑惑点:gcc9.3.0编译结果是前一种布局,按理说应该是后一种的???
3. 构造函数
- 存在两个析构函数: 一个是自己定义的,一个是编译器合成的,编译器合成的析构函数调用了自己定义的析构函数;
- 如果一个虚函数在基类定义了,派生类没有重写,那么子类的虚表里面存的是基类的虚函数地址
- 对于非虚函数的继承,
Point2D::fun()函数会传入this指针,即对象的地址,如果在Point3D里面调用Point2D::fun()会进行类型转换,强制转换成Point2D类型。- 基类的虚函数需要声明成虚析构函数,否则容易发生内存泄漏
下面是两条误解,需要自己写构造函数,不能让编译器写
如果用户没有定义构造函数,编译器合成默认构造函数是没有用的
学习链接:
https://www.bilibili.com/video/BV1v64y1q7JT?p=1&vd_source=d4df260b1907b7a2424f450d404e1eba
待更新添加…
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)