本文主要是介绍C++面试常见问题总结(五)(本人面试遇到的问题记录,作为学习和交流用),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1:C++虚函数表是如何实现的?虚表存放在哪里?虚表中的数据是在什么时候确定的? 对象中的虚表指针又在什么时候赋值的?
类的虚函数表会被这个类的所有对象所共享。类的对象可以有很多,但是他们的虚函数表指 针都指向同一个虚函数表。因此,我们可以把虚函数表简单理解为类的静态数据成员。虚函 数表是类的对象共享的。注意,虚函数表的指针不共享。类的每一个对象都有一个属于他自 己的虚函数表指针。 在 C++的标准规格说明书中说到,编译器必需要保证虚函数表的指针存在于对象实例中最 前面的位置(这是为了保证正确取到虚函数的偏移量)。 这意味着我们通过对象实例的地 址得到这张虚函数表,然后就可以遍历其中函数指针,并调用相应的函数。虚函数表有其结 束标志,不同的编译器下结束标志是不同的。
2:联合与结构体的区别
struct 各成员各自拥有自己的内存,各自使用互不干涉,同时存在的,遵循内存对齐原则。 一个 struct 变量的总长度等于所有成员的长度之和。 Union 各成员共用一块内存空间,并且同时只有一个成员可以得到这块内存的使用权(对该 内存的读写),各变量共用一个内存首地址。因而,联合体比结构体更节约内存。一个 union 变量的总长度至少能容纳最大的成员变量,而且要满足是所有成员变量类型大小的整数倍。 不允许对联合体变量名 U2 直接赋值或其他操作。所有成员共用一块存储空间,在操作不同 的成员时,编译器根据不同的成员类型,按照不同的方式取值
3:malloc 与 new 的区别
New 返回指定类型的指针,并可以自动计算所需要的大小。 New 可以在分配后调用构造函数。 New 如果分配不成功会返回错误码。 New
这篇关于C++面试常见问题总结(五)(本人面试遇到的问题记录,作为学习和交流用)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!