C++面试常见问题总结(五)(本人面试遇到的问题记录,作为学习和交流用)

1:C++虚函数表是如何实现的?虚表存放在哪里?虚表中的数据是在什么时候确定的? 对象中的虚表指针又在什么时候赋值的?

   类的虚函数表会被这个类的所有对象所共享。类的对象可以有很多,但是他们的虚函数表指 针都指向同一个虚函数表。因此,我们可以把虚函数表简单理解为类的静态数据成员。虚函 数表是类的对象共享的。注意,虚函数表的指针不共享。类的每一个对象都有一个属于他自 己的虚函数表指针。 在 C++的标准规格说明书中说到,编译器必需要保证虚函数表的指针存在于对象实例中最 前面的位置(这是为了保证正确取到虚函数的偏移量)。 这意味着我们通过对象实例的地 址得到这张虚函数表,然后就可以遍历其中函数指针,并调用相应的函数。虚函数表有其结 束标志,不同的编译器下结束标志是不同的。

2:联合与结构体的区别

   struct 各成员各自拥有自己的内存,各自使用互不干涉,同时存在的,遵循内存对齐原则。 一个 struct 变量的总长度等于所有成员的长度之和。 Union 各成员共用一块内存空间,并且同时只有一个成员可以得到这块内存的使用权(对该 内存的读写),各变量共用一个内存首地址。因而,联合体比结构体更节约内存。一个 union 变量的总长度至少能容纳最大的成员变量,而且要满足是所有成员变量类型大小的整数倍。 不允许对联合体变量名 U2 直接赋值或其他操作。所有成员共用一块存储空间,在操作不同 的成员时,编译器根据不同的成员类型,按照不同的方式取值

 

3:malloc 与 new 的区别

  New 返回指定类型的指针,并可以自动计算所需要的大小。 New 可以在分配后调用构造函数。 New 如果分配不成功会返回错误码。 New

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值