当前位置: 代码迷 >> 综合 >> C++ 之 保证基类对象模型在派生类中维持原样性(并扩展描述虚表指针的内存)
  详细解决方案

C++ 之 保证基类对象模型在派生类中维持原样性(并扩展描述虚表指针的内存)

热度:71   发布时间:2024-02-28 03:34:27.0

简单讲: 意思就是基类对象的内存大小是多少,那么在派生类的对象内存中,基类部分占用内存空间不变。比如,考虑字节对齐的情况,基类补齐的内存空间里面,不可能填充派生类的数据成员。

实力验证:
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;

class CBase{
    //virtual void show(){}
private:
    int nData;
    char sz[3];
}; //基类中int占4字节,加char数组3字节,但是默认win32是4字节对齐,所以补充一个字节。

class CBase2:public CBase{
private:
    char ch;
    //virtual void show2(){}
};//派生类只有1个字节,如果父子空间可以合并,那么CBase2的大小应该是8字节;如果C++保证基类对象空间完整性,那么派生类的ch就需要额外填充3字节,并加上基类的8字节。

补充:c++编译器没有规定,在派生类对象中,父类对象内存空间是在派生类数据成员的前面,还是后面。(一般父类在前)

int _tmain(int argc, _TCHAR* argv[])

  相关解决方案