C++面试必备:new、delete、malloc、free的区别
下载需积分: 3 | DOC格式 | 81KB |
更新于2024-07-30
| 154 浏览量 | 举报
C++面试宝典
C++是一门功能强大的编程语言,它提供了多种方式来管理动态内存。了解C++中的内存管理机制是非常重要的,特别是在面试中。本文将对C++中的内存管理机制进行详细讲解,并提供了一些常见的面试题目。
一、新、delete、malloc、free关系
在C++中,有多种方式来管理动态内存。其中,new和delete是C++中的运算符,malloc和free是C语言的标准库函数。
1. delete会调用对象的析构函数,new调用构造函数。malloc申请内存空间,free只会释放内存。
2. malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。
3. 它们都可用于申请动态内存和释放内存。
4. 对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。
5. 对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。
由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。
二、delete与delete[]区别
delete和delete[]是C++中的两个不同的运算符,它们的作用域和使用场景不同。
1. delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。
2. 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
delete[] mTest1; //-3-
delete[] mTest2; //-4- 报错,使用delete
这就说明:对于内建简单数据类型,delete和delete[]功能是相同的。对于自定义的复杂数据类型,delete和delete[]不能互用。delete[]删除一个数组,delete删除一个指针。简单来说,用new分配的内存,用delete删除;用new[]分配的内存,用delete[]删除。delete[]会调用数组元素的析构函数。内部数据类型没有析构函数,所以问题不大。
C++中的内存管理机制非常复杂,需要我们细心地理解和掌握。只有掌握了这些知识点,我们才能更好地编写C++程序。
相关推荐
38 浏览量
6 浏览量
6 浏览量
5 浏览量
beyondtc30
- 粉丝: 0
- 资源: 5
最新资源
- kindergarten
- 基于VB实现ACCESS汽车租凭管理系统(论文+系统).rar
- 软件测试工程师面试题及答案(全)文档集
- 最好用的JAVA代码混淆工具proguard-7.0.0.zip
- mixlib-cli:用于创建命令行应用程序的混合-为参数说明和处理提供了简单的DSL
- Flutter_Localizations:一个示例flutter应用程序,演示了如何使用本地化来支持2种语言
- 自平衡智能小车第二版-电路方案
- zstack.zip
- 基于MATLAB的遗传算法工具箱(51个MATLAB工具+源代码).zip
- Weights-Initialization-in-Nueral-Networks:神经网络中的权重初始化技术
- 20200917-头豹研究院-汽车应用系列深度研究:2019年中国经营性汽车租赁行业应用概览.rar
- CICD_automation
- 变频器 SINAMICS G120D,配备控制单元 CU240D-2.zip
- 耶鲁大学人脸识别数据集
- sinatra-book:正式回购到sinatrasinatra-book教程+食谱
- DFRobot_DS323X