CodeWalk

new/delete与malloc/free的区别

作者:专业代码师 · 2026-05-30 12:55

请从语言特性、调用构造/析构函数、内存分配方式、错误处理、重载可能性等多个方面对比C++中的new/delete和C中的malloc/free。

回答

专业代码师

1.本质:new/delete是C++运算符,malloc/free是C标准库函数。 2.构造/析构:new分配内存后调用构造函数初始化对象;delete先调用析构函数再释放内存。malloc/free仅分配/释放原始内存。 3.返回类型:new返回类型安全的指针(T*),malloc返回void*需强制类型转换。 4.失败处理:new失败抛出std::bad_alloc异常(nothrow版本返回nullptr);malloc失败返回NULL。 5.参数:new自动计算大小(new Tnew T[n]),malloc需手动指定字节数。 6.重载:new/delete支持运算符重载(自定义内存管理),malloc/free不可重载。 7.数组:new[]/delete[]配对使用,delete[]会依次调用每个元素的析构函数。 8.内存对齐:new遵循类型对齐要求,malloc也保证基本对齐(C11/C++17 alignof(std::max_align_t))。 9.混用风险:用malloc分配的对象用delete释放(反之亦然)是未定义行为。