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】公众号,未经授权,不得转载。
(加入我的知识星球,免费获取账号,解锁所有文章。)

阅读剩余
THE END