malloc free、new delete区别

news/2024/10/30 9:29:32/

共同点:

  1. 都是从堆上申请空间,并且需要用户手动释放。

不同点:

  1. malloc和free是标准库函数,new和delete是操作运算符。
  2. malloc申请的空间不会初始化,new可以初始化。
  3. malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可。
  4. malloc的返回值为void*, 在使用时必须强转,new不需要,因为new后跟的是空间的类型。
  5. malloc申请空间失败时,返回的是NULL,因此使用时必须判空,new不需要,但是new需要捕获异常(底层区别)。
  6. 申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理(底层区别)。

区别:

1. 对象类型的自动识别:

在使用 new 操作符时,编译器会自动识别对象的类型,并根据其所需内存大小为其分配内存空间,并返回一个指向该对象的指针;而在使用 malloc 函数时,我们需要手动指定所需内存空间的大小,且 malloc 函数分配的内存空间都是 void 类型的指针,需要通过强制类型转换后才能使用。

2. 构造和析构函数的执行:

使用 new 操作符动态地分配一个对象的内存空间时,还会自动调用该对象的构造函数进行初始化操作,而 delete 操作符会自动调用对象的析构函数进行内存回收;而使用 malloc 分配内存空间时,我们需要手动调用对象的构造函数进行初始化以及手动调用析构函数进行内存释放。

3. 内存泄漏风险:

使用 malloc/free 命令进行动态内存分配时,有可能会忘记调用 free 函数进行内存释放,从而导致内存泄漏;而使用 new/delete 操作符时,我们只需要关注对象的创建和销毁,编译器将会自动处理内存的分配与释放。

4. 适用范围:

new/delete 操作符 mainly 用于 C++ 的类对象动态内存分配和销毁,而 malloc/free 函数则更具通用性,可以用于任何类型的动态内存分配。


http://www.ppmy.cn/news/98782.html

相关文章

2023 英国剑桥大学博士后含金量

作为英国顶尖的大学之一,剑桥大学自然也是博士后研究的理想选择。然而,对于那些希望在这所学府找到博士后职位的人来说,他们可能会问:剑桥大学的博士后含金量如何?首先,我们需要了解什么是博士后研究。简单…

LeetCode第347场周赛

2023.5.28LeetCode第347场周赛 A. 移除字符串中的尾随零 思路 从最后一位开始遍历,为0则跳过 代码 class Solution { public:string removeTrailingZeros(string num) {int i num.size() - 1;while (i > 0 && num[i] 0) i -- ;return num.substr(…

测试工程师 | 测试基础知识点速查

文章目录 1. 测试介绍2. 测试的分类2.1 按照测试阶段划分(4种)2.2 按照代码可见度划分(3种)2.3 是否运行代码(2种)2.4 是否按照自动化(2种)2.5 其它测试(4种)…

2023上半年软考系统分析师科目一整理-02

2023上半年软考系统分析师科目一整理-02 1. 安全2. 知识产权 1. 安全 对称加密算法中,由于加密解密都使用同样的密钥,所以密钥需要进行共享,故也被称共享密钥算法。 三重DES加密是使用2个DES密钥,进行多次操作来完成的&#xff…

Git日常使用技巧 - 笔记

Git日常使用技巧 - 笔记 Git是目前世界上最先进的分布式版本控制系统 学习资料 廖雪峰 学习视频 https://www.bilibili.com/video/BV1pX4y1S7Dq/?spm_id_from333.337.search-card.all.click&vd_source2ac127043ccd79c92d5b966fd4a54cd7 Git 命令在线练习工具 https://l…

2023年五一数学建模 B 题过程与结果

文章目录 第一问第二问数据时序分析Auto-ARIMA第二问求解解的情况A->Q:D-> AQ-V总快递数 第三问第四问遗传算法求解 第五问X-11 分解趋势:采用滑动均值模型求取季度趋势: 残差求解残差分析固定需求、非固定需求 代码 第一问 见 2023 年 五一杯 B …

低资源方面级情感分析研究综述

文章目录 前言1. 引言2. 问题定义、数据集和评价指标2.1 问题定义2.2 任务定义2.3 常用数据集 3. 方面级情感分析的方法3.1 **方面词抽取**3.1.1 基于无监督学习的方法3.1.1.1 基于规则的方面词抽取3.1.1.2 基于统计的方面词抽取 3.1.2 基于有监督浅层模型的方法3.1.3 基于有监…

码蹄杯语言基础:选择结构(C语言)

⭐MT1109和10相比 请编写一个简单程序&#xff0c;输入一个整数&#xff0c;和10比较&#xff0c;输出比较结果 格式 输入格式&#xff1a; 输入整型 输出格式&#xff1a; 输出…大于或者等于或者小于10 #include<stdio.h> int main() {int x;scanf("%d",…