(虚)继承类的内存占用大小

(虚)继承类的内存占用大小 首先,平时所声明的类只是一种类型定义,它本身是没有大小可言的。 因此,如果用sizeof运算符对一个类型名操作,那得到的是具有该类型实体的大小。 计算一个类对象的大小时的规律:     1、空类、单一继承的空类、多重继承的空类所占空间大小为:1(字节,下同);     2、一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间的;     3、因此一个对象的大小≥所有非静态成员大小的总和;     4、当类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在对象里安插一个指针vPtr指向虚函数表VTable;     5、虚承继的情况:由于涉及到虚函数表和虚基表,会同时增加一个(多重虚继承下对应多个)vfPtr指针指向虚函数表vfTable和一个vbPtr指针指向虚基表vbTable,这两者所占的空间大小为:8(或8乘以多继承时父类的个数);     6、在考虑以上内容所占空间的大小时,还要注意编译器下的“补齐”padding的影响,即编译器会插入多余的字节补齐;     7、类对象的大小=各非静态数据成员(包括父类的非静态数据成员但都不包括所有的成员函数)的总和+ vfptr指针(多继承下可能不止一个)+vbptr指针(多继承下可能不止一个)+编译器额外增加的字节。

#include "stdafx.h"
#include<iostream>
using namespace std;

class A
{
    
};
class B
{
public:
    virtual void b1(){}
    virtual void b2(){}
};
class C : public B
{
public:
    virtual void c(){}
};
class D : public virtual B
{
public:
    virtual void d1(){}
    virtual void d2(){}
};
class E : public virtual D
{
public:
    virtual void e1(){}
    virtual void e2(){}
};
int _tmain(int argc, _TCHAR* argv[])
{
    cout<<sizeof(A)<<endl<<sizeof(B)<<endl<<sizeof(C)<<endl<<sizeof(D)<<endl<<sizeof(E);
    return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网杂技

javascript大法好,不用记

数组的操作 ---- Array.prototype.toString ( ) 把数组转变为字符串,返回字符串,arr.toString(); ---- Arr...

3717
来自专栏企鹅号快讯

Python网络爬虫之正则表达式

正则表达式非Python独有,在Python中通过re库模块实现。 ? 下面是一些常见的匹配模式 ? re.match re.match尝试从字符串的起始位置匹...

19310
来自专栏编程坑太多

Python正则表达式re模块简明笔记

1315
来自专栏码云1024

c++ 深入理解虚函数

5606
来自专栏深度学习之tensorflow实战篇

hive字符串函数

hive字符串函数 1. 字符串长度函数:length 语法: length(string A) 返回值: int 说明:返回字符串A的长度 举例:hive> ...

8377
来自专栏python学习指南

Python爬虫(十)_正则表达式

本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规则表达式,通常被用来检索、替换那些符合某...

2686
来自专栏cs

归并排序

归并排序,采用分治法。首先采用递归,把数组分成一小段有序,然后再把有序的数组一一合并。 首先看看,把有序的二个数组,合成一个的算法。 package day20...

2474
来自专栏转载gongluck的CSDN博客

python笔记:#013#高级变量类型

高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (in...

3479
来自专栏软件开发

JavaScript学习总结(四)——this、原型链、javascript面向对象

一、this 在JavaScript中this表示:谁调用它,this就是谁。 JavaScript是由对象组成的,一切皆为对象,万物皆为对象。this是一个动...

2727
来自专栏PPV课数据科学社区

Python 正则表达式

? 简介 正则表达式(regular expression)是可以匹配文本片段的模式。最简单的正则表达式就是普通字符串,可以匹配其自身。比如,正则表达式 ‘h...

4146

扫码关注云+社区

领取腾讯云代金券