1.38、malloc和new的区别是什么?
性质不同
- •
malloc
是C标准库函数,仅负责分配指定字节数的原始内存,返回void*
,不调用构造函数; - •
new
是C++运算符,除了分配内存,还会调用对象的构造函数,返回具体类型指针。
类型安全
- •
malloc
返回void*
,需要手动强制类型转换,存在类型安全隐患; - •
new
返回目标类型指针,类型安全且无需转换。
失败处理
- •
malloc
分配失败返回NULL
,调用者需手动检查; - •
new
分配失败会抛出std::bad_alloc
异常,便于异常处理机制管理。
内存释放对应
- •
malloc
分配的内存必须用free
释放; - •
new
分配的对象必须用delete
释放,delete
会调用析构函数,确保资源正确释放。
构造与析构
- •
malloc
不调用构造或析构函数,只分配原始内存; - •
new
调用构造函数初始化对象,delete
调用析构函数清理对象。
可重载性
- •
new
运算符可以被类重载,实现自定义内存管理; - •
malloc
是库函数,无法重载。
内存分配位置
两者均在堆(自由存储区)分配内存,但new
的具体行为可通过重载operator new
定制。
本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。
(加入我的知识星球,免费获取账号,解锁所有文章。)
阅读剩余
版权声明:
作者:讳疾忌医-note
链接:https://www.1217zy.vip/archives/1306
文章版权归作者所有,未经允许请勿转载。
THE END