C++常见面试题及答案

95272021-12-21 12:02

  各大厂最近很动荡,很多人都在人心惶惶,为了以防万一,不做没准备的仗,今天小编就为大家准备一些C++的面试题。

C++常见面试题及答案

  1、堆栈溢出的一般原因是什么?

  答:1、不回收垃圾资源。

          2、层次过深的递归调用(无限递归调用),每次函数调用都会将参数、返回值不断压栈。

  2、new、delete、malloc、free。

  delete将调用与new对应的对象的分析函数。free只释放内存。new将调用结构函数。malloc和free是C++/C语言的标准库函数,new和delete是C++的操作符。它们都可以用来申请动态内存和释放内存。对于非内部数据类型的对象,仅使用malloc/free不能满足动态对象的要求。对象在创建时应自动执行结构函数,对象在消亡前应自动执行分析函数。

  总之,malloc和free只会动态地申请和释放内存,而new和delete除了动态地申请示范内存外,还会调用结构函数和分析函数。malloc和free是标准库函数,new和delete是操作符。

  malloc和free只能满足内部数据类型对象内存的动态分配和释放,而new和delete都可以。malloc和free申请和释放的动态内存在自由存储区,new和delete在堆积区。

  3、delete和delete[]

  C++回收new分配的单个对象的内存空间时使用delete,回收new[]分配的一组对象的内存空间时使用delete[]。new[]和delete[]分为两种情况:(1)基本数据类型分配和回收空间(2)自定义类型分配和回收空间。delete只调用一次分析函数,delete[]使用每个成员的分析函数。

  基本类型的对象没有分析函数,所以delete和delete[]应该可以回收由基本类型组成的数组空间;但对于类对象数组,只能使用delete[]。对于new的单个对象,只能使用delete而不能使用delete[]回收空间。

  4、什么时候使用常引用

  为了提高程序的执行效率,函数的参数声明通常被引用,因此在传输实际参数时,没有必要生成实际参数的副本,也没有副本分配内存空间。在函数体中操作的是实际参数的别名,即实际参数本身,与指针相比具有良好的可读性和可操作性;如果此时需要确保传输的实际参数不会改变,则必须将作为参数的引用声明作为常规引用。事实上,为了区分是传输参数还是传输参数,不需要改变实际参数就应该使用const。

  复制构造函数的参数必须经常引用:Array(constAray&arr);

  5、C和C++中的struct有什么区别?

  struct只是变量的集合,不能包含成员函数,也不能包含访问权限的概念。

  C++中的struct和C++中的struct一样,可以有成员变量、成员函数和继承多态性。唯一不同的是class的默认访问权限是private,而struct的默认访问权限是public。

  以上就是小编为大家整理发布的“C++常见面试题及答案”一文,更多相关内容尽在开课吧广场C++教程频道。

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享