C++面试关键知识点:new、delete与malloc、free的区别
"C++面试宝典" C++面试宝典是一本全面涵盖历年IT行业面试题目的经典参考资料,尤其关注C++相关的问题。书中详细讨论了C++编程语言中的核心概念,包括内存管理、对象生命周期以及面向对象特性等方面的知识。 1. new、delete、malloc、free关系 在C++中,`new`和`delete`是专门针对对象管理的运算符,它们不仅分配和释放内存,还会调用构造函数和析构函数。相反,`malloc`和`free`是C语言中的库函数,仅负责基本的内存分配和释放,不处理对象的构造与析构。当涉及到类对象时,使用`new`和`delete`更加合适,因为它们能够确保对象生命周期的正确管理。而`malloc`和`free`则适用于原始数据类型或不需要构造和析构的内存分配。 2. delete与delete[]的区别 `delete`和`delete[]`的主要区别在于处理数组对象的方式。`delete`只释放一个单独的对象,并调用该对象的析构函数。而`delete[]`用于释放数组,会依次调用每个数组元素的析构函数,然后释放整个内存块。这表示对于自定义类型,应使用`delete[]`与`new[]`配套使用,而对于原始类型,两者可以互换,因为原始类型没有析构函数。例如: ```cpp MemTest *mTest1 = new MemTest[10]; // 使用new[] MemTest *mTest2 = new MemTest; // 使用new int *pInt1 = new int[10]; // 使用new[] int *pInt2 = new int; // 使用new delete[] pInt1; // 正确,释放数组 delete[] pInt2; // 正确,释放单个对象 delete[] mTest1; // 正确,释放数组并调用析构 delete[] mTest2; // 错误,mTest2不是数组,会导致未定义行为 ``` 3. C和C++的共同点与不同之处 共同点:C++是在C语言的基础上发展起来的,两者都支持过程化编程,有类似的语法结构,如循环、条件语句等,且都允许直接访问硬件资源,提供低级别的内存操作。 不同之处:C++引入了类和对象,支持面向对象编程,包含模板、异常处理、命名空间等功能,提供了更高级别的抽象,强调代码重用和封装。C++还支持STL(标准模板库),提供了容器、算法和迭代器等工具。 4. 继承的优缺点 优点: - 代码重用:子类可以继承父类的属性和方法,减少代码重复。 - 多态性:通过虚函数实现接口的多态,一个基类指针可以调用子类重写的函数,提高程序的灵活性。 - 可扩展性:方便地增加新功能,而不影响已有的代码。 缺点: - 代码复杂性:过度使用继承可能导致类层次结构过于复杂,难以理解和维护。 - 紧耦合:子类与其父类紧密耦合,父类的修改可能影响到所有子类。 - 抽象层次:不恰当的继承层次可能导致抽象层次混淆,使得类的设计变得困难。 - 单一职责原则:继承可能导致类承担过多责任,违反设计原则。 这些知识点只是C++面试宝典中的冰山一角,实际书籍中会涵盖更多主题,如模板、异常处理、STL、设计模式等,对准备C++相关的面试具有很高的参考价值。
剩余63页未读,继续阅读
- 粉丝: 1
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 构建Cadence PSpice仿真模型库教程
- VMware 10.0安装指南:步骤详解与网络、文件共享解决方案
- 中国互联网20周年必读:影响行业的100本经典书籍
- SQL Server 2000 Analysis Services的经典MDX查询示例
- VC6.0 MFC操作Excel教程:亲测Win7下的应用与保存技巧
- 使用Python NetworkX处理网络图
- 科技驱动:计算机控制技术的革新与应用
- MF-1型机器人硬件与robobasic编程详解
- ADC性能指标解析:超越位数、SNR和谐波
- 通用示波器改造为逻辑分析仪:0-1字符显示与电路设计
- C++实现TCP控制台客户端
- SOA架构下ESB在卷烟厂的信息整合与决策支持
- 三维人脸识别:技术进展与应用解析
- 单张人脸图像的眼镜边框自动去除方法
- C语言绘制图形:余弦曲线与正弦函数示例
- Matlab 文件操作入门:fopen、fclose、fprintf、fscanf 等函数使用详解