malloc、free 和 new、delete 的区别

简介: malloc、free 和 new、delete 的区别

一、从定义

malloc、free是C中的库函数

new、delete 是C++当中的操作符

注:操作符可以被重载

二、从使用方式

new 自动计算所需分配内存;malloc 需要手动计算所需分配内存

new 返回值是对象类型的指针;malloc 返回的是void*,需要转换为所需类型

delete 释放内存时需要对象类型的指针;free是void*类型指针

new 分配失败会抛出异常;malloc 分配失败会返回NULL

new 是在free store上分配内存;malloc 在堆上分配内存

new 先调用 operator new,申请足够的内存,然后调用该类型的构造函数,初始化成员变量,最后返回对象类型指针;delete先调用析构函数,调用 operator delete函数释放内存

delete、free调用后,内存不会立即释放,指针也不会指向空,为了避免野指针,释放内存后,应该把指针指向null


推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:

零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)

https://xxetb.xet.tech/s/VsFMs


相关文章
|
19天前
|
C语言
爱上C语言:分支与循环(分支篇)多个if与if — else if区别
爱上C语言:分支与循环(分支篇)多个if与if — else if区别
|
29天前
|
C语言
C语言中的exit与return的区别
C语言中的exit与return的区别
|
2月前
|
编译器 C语言 C++
【C语言】malloc()函数详解(动态内存开辟函数)
【C语言】malloc()函数详解(动态内存开辟函数)
43 2
|
2月前
|
Java 编译器 C语言
【JavaSE】运算符详解及与C语言中的区别
【JavaSE】运算符详解及与C语言中的区别
51 0
|
5天前
|
程序员 编译器 C语言
C语言知识:动态内存管理(malloc free calloc realloc)
C语言知识:动态内存管理(malloc free calloc realloc)
|
19天前
|
Java 程序员 编译器
C语言中灵活多变的动态内存,malloc函数 && free函数&& calloc函数 && realloc函数
C语言中灵活多变的动态内存,malloc函数 && free函数&& calloc函数 && realloc函数
|
23天前
|
程序员 编译器 C语言
【C语言】动态内存管理之4个内存函数`malloc`,`free`,`calloc`和`realloc`深度了解
【C语言】动态内存管理之4个内存函数`malloc`,`free`,`calloc`和`realloc`深度了解
|
23天前
|
存储 搜索推荐 编译器
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
【C语言】一篇文章深入解析联合体和枚举且和结构体的区别
|
29天前
|
C语言
C语言子函数的使用,子函数放前面和放后面的区别
C语言子函数的使用,子函数放前面和放后面的区别
|
2月前
|
编译器 C语言 C++
【C语言】free()函数详解(动态内存释放函数)
【C语言】free()函数详解(动态内存释放函数)
25 0