面试:sizeof关键字

  1. sizeof(空类型)=?
    answer:1
    解释:对于空类型或者空类型的实例化,不包含任何信息,但是声明该类型的实例时,必须在内存中有空间,否则无法使用这些实例。占用多少由编译器决定,VS中占用1个字节
  2. 在空类型中添加一个构造函数和析构函数,sizeof()=?
    answer:1
    解释:调用构造函数和析构函数只需要知道函数的地址即可,而这些函数的地址只与类型相关,而与类型的实力无关,编译器也不会因为这两个函数而在实例中添加任何的额外信息。
    note:公用的成员函数在单独的一段内存空间,所有的类实例共享,类似于静态成员变量;一个对象所占的空间大小只取决于该对象中数据成员所占的空间,而与成员函数(包括内联函数,但是虚函数例外)无关。详见:成员函数的存储方式
  3. 如果把析构函数标记为虚函数呢?
    answer:4或者8
    解释:C++的编译器一旦发现一个类型中有虚函数,就会为该类型生成虚函数表,并在该类型的每一个实例中添加一个指向虚函数表的指针。
    指针在32位机器上一个指针占用四个字节,64位机器上8个字节。
    int在32和64位均为4个字节,机器位数和编译器共同决定
  4. 类中含有静态成员变量呢?
    answer:也不占类实例大小,类似于普通的成员函数。
    多个类实例共用一个静态成员,是一种特殊的全局变量,只能被类使用。
  5. 继承含有虚函数的类?
    单一继承:派生类中大小都为4(32位机器)(只考虑虚函数, 无其他成员),虚函数地址都存在于虚函数指针指向的虚函数表中。
    多重继承:派生类会出现多个虚指针,此时大小就要具体计算了,如果继承两个含有虚函数的基类,派生类中存在两个虚指针,其大小为8(32位机器)。
  6. 虚继承含有虚函数的类?class Derive:virtual public Base{}
    父类中存在虚函数,派生类进行虚继承,此时在派生类中出现两个虚指针,一个是指向类中虚函数表的指针,另一个是指向父类的指针,两个是不同的指针,所以类的大小应该是二者相加,即8(32位机器).
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值