C++面试必备:new、delete、malloc、free的区别
需积分: 3 124 浏览量
更新于2024-07-30
1
收藏 81KB DOC 举报
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++程序。
845 浏览量
102 浏览量
2018-09-27 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
2023-07-15 上传
beyondtc30
- 粉丝: 0
- 资源: 5
最新资源
- Hadoop生态系统与MapReduce详解
- MDS系列三相整流桥模块技术规格与特性
- MFC编程:指针与句柄获取全面解析
- LM06:多模4G高速数据模块,支持GSM至TD-LTE
- 使用Gradle与Nexus构建私有仓库
- JAVA编程规范指南:命名规则与文件样式
- EMC VNX5500 存储系统日常维护指南
- 大数据驱动的互联网用户体验深度管理策略
- 改进型Booth算法:32位浮点阵列乘法器的高速设计与算法比较
- H3CNE网络认证重点知识整理
- Linux环境下MongoDB的详细安装教程
- 压缩文法的等价变换与多余规则删除
- BRMS入门指南:JBOSS安装与基础操作详解
- Win7环境下Android开发环境配置全攻略
- SHT10 C语言程序与LCD1602显示实例及精度校准
- 反垃圾邮件技术:现状与前景