C++对象

本文探讨了C++中类对象所占用的空间,包括空类、包含成员函数和变量、虚函数以及继承基类的情况。详细阐述了类实例的内存布局,包括this指针的调整,并介绍了编译器在哪些情况下会创建默认构造函数和拷贝构造函数。
摘要由CSDN通过智能技术生成

1 类对象所占用的空间

1.1 C++中一个空类及这个类的实例占用一个字节的空间

为什莫C++中一个空类占用一个字节的空间,我在网上找了一份答案,仅供参考:因为C++标准规定最高派生类的实例大小至少是1,而不是一定是1(例如有些实现考虑了对齐,这时候实例大小会大于1,比如4或8等等,视对齐系数而定),而基类子对象允许为0,这是为了给予编译器空基类优化的自由

1.2 当一个类中有多个函数时(不是虚函数)

此时这个类及实例出来的对象仍然只是占用一个字节的空间,所以可以确定,一个类实例出来的多个对象占用同一个类成员函数,也就是类成员函数是跟着类走的

1.3 当一个类中有成员变量时

成员变量为非静态成员变量时:

当一个类中有一个char类型的成员变量,那么这个类及实例出的对象占用一个字节的空间

当一个类中有多个成员变量时,占用的空间要遵循字节对齐原则

当一个类中有非静态成员变量时,这些成员变量在每个对象中都是独一份

成员变量为静态成员变量时:

这个静态成员变量类似成员函数一样不占用这个类及对象的空间

1.4 当一个类中有虚函数时

当一个类中有虚函数时,那么这个类中就会多一个虚函数表指针(vfptr,用于指向虚函数表,虚函数表中有多个指针,每个指针指向一个虚函数入口),也就是说当一个类中有虚函数,那么这个类中sizeof值就会多四个字节(在X86平台是4个字节,在X64平台是8个字节,这取决于在不同平台下,一个指针占用多少个字节)

1.5 当一

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值