美文网首页
C++面试题目总结

C++面试题目总结

作者: 闫阿佳 | 来源:发表于2017-11-26 11:46 被阅读0次

1.内存的分配方式有几种?

  1. 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量。
    2 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
  2. 从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

2. new,delete,malloc,free关系

delete会调用对象的析构函数,和new对应;free只会释放内存,new调用构造函数。
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。

3.delete与 delete[] 区别

delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。在More Effective C++中有更为详细的解释:“当delete操作符用于数组时,它为每个数组元素调用析构函数,然后调用operator delete来释放内存。”delete与new配套,delete []与new []配套
MemTest *mTest1=new MemTest[10];
MemTest *mTest2=new MemTest;
Int *pInt1=new int [10];
Int *pInt2=new int;
delete[]pInt1; //-1-
delete[]pInt2; //-2-
delete[]mTest1; //-3-
delete[]mTest2; //-4-
在-4-处报错。

这就说明:对于内建简单数据类型,delete和delete[]功能是相同的。对于自定义的复杂数据类型,delete和delete[]不能互用。delete[]删除一个数组,delete删除一个指针。简单来说,用new分配的内存用delete删除;用new[]分配的内存用delete[]删除。delete[]会调用数组元素的析构函数。内部数据类型没有析构函数,所以问题不大。如果你在用delete时没用括号,delete就会认为指向的是单个对象,否则,它就会认为指向的是一个数组。

4.C++有哪些性质(面向对象特点)

封装,继承和多态。

5.子类析构时要调用父类的析构函数吗?

析构函数调用的次序是先派生类的析构后基类的析构,也就是说在基类的的析构调用的时候,派生类的信息已经全部销毁了。定义一个对象时先调用基类的构造函数、然后调用派生类的构造函数;析构的时候恰好相反:先调用派生类的析构函数、然后调用基类的析构函数。

相关文章

  • C++面试题目总结

    C++常考题目参考本 1、指针和引用的区别 实体与别名 内存分配,指针需要引用不需要 sizeof() 对象的大小...

  • C++面试题目总结

    1.内存的分配方式有几种? 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存...

  • 五万字长文:C/C++ 面试知识总结(上)

    C/C++ 面试知识总结 这是一篇五万字的C/C++面试知识点总结,包括答案:这是上篇,下篇今天也推送了,需要的同...

  • 嵌入式面试高频考点(建议收藏)

    本篇参考网上及自身的面试经验,总结一些高频考察的Linux C/C++知识点,方便后续查阅总结。 一、C/C++编...

  • 五万字长文:C/C++ 面试知识总结(中)

    本文是:五万字长文:C/C++ 面试知识总结(上)的续篇 C++ 11 shared_ptr unique_ptr...

  • java面试分享:2019年最新美团java三面,以及六点面试总

    1.技术三面题目: 2.面试题目总结 1.Java集合类:hashmap、currenthashmap等,建议面试...

  • 面试准备

    C++面试总结 New、Delete和malloc、free的区别? New和Delete自动调用 构造函数 和 ...

  • 链表 leetcode题目总结 c++

    链表 链表和数组最大的区别在于,链表不支持随机访问,不像数组可以对任意一位的数据进行访问,链表只能从头一个一个往下...

  • 面试题目总结

    阿里机器学习面试的一些题目, 1.说一下KNN的过程(刚开始的时候和k-means搞混了。。。) KNN是k ne...

  • 面试题目总结

    算法 统计学习方法,每一个算法KNN,朴素贝叶斯,决策树,logistic回归,支持向量机,提升算法,EM算法,隐...

网友评论

      本文标题:C++面试题目总结

      本文链接:https://www.haomeiwen.com/subject/rrgdjxtx.html