C++面试关键知识点:new、delete与malloc、free的区别
需积分: 3 195 浏览量
更新于2024-07-28
收藏 95KB DOCX 举报
"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++相关的面试具有很高的参考价值。
845 浏览量
102 浏览量
2018-09-27 上传
2023-07-15 上传
2024-01-27 上传
2023-08-18 上传
2023-09-15 上传
2024-06-25 上传
2023-07-28 上传
china20064558
- 粉丝: 1
- 资源: 9
最新资源
- Aspose资源包:转PDF无水印学习工具
- Go语言控制台输入输出操作教程
- 红外遥控报警器原理及应用详解下载
- 控制卷筒纸侧面位置的先进装置技术解析
- 易语言加解密例程源码详解与实践
- SpringMVC客户管理系统:Hibernate与Bootstrap集成实践
- 深入理解JavaScript Set与WeakSet的使用
- 深入解析接收存储及发送装置的广播技术方法
- zyString模块1.0源码公开-易语言编程利器
- Android记分板UI设计:SimpleScoreboard的简洁与高效
- 量子网格列设置存储组件:开源解决方案
- 全面技术源码合集:CcVita Php Check v1.1
- 中军创易语言抢购软件:付款功能解析
- Python手动实现图像滤波教程
- MATLAB源代码实现基于DFT的量子传输分析
- 开源程序Hukoch.exe:简化食谱管理与导入功能