从对象的角度看:
new支持对象的初始化和析构,用new创建对象会自动执行构造函数,适合用来构造C++对象
malloc 是不支持对象的初始化,适用于直接操作内存的场景
从返回类型的角度看:
new 会返回正确的指针类型,可直接用于建立C++对象
malloc 返回void* 类型,需进行类型转换
使用实例:
// 使用 new
int* ptr1 = new int(5); // 初始化为5
delete ptr1; // 使用 delete 释放
// 使用 malloc
int* ptr2 = (int*)malloc(sizeof(int));
*ptr2 = 5; // 手动初始化
free(ptr2); // 使用 free 释放
从内存分配失败的情况看:
new 如果分配失败会抛出std::bad_alloc异常
malloc 如果分配失败,会返回空指针NULL,需手动检查返回是否为NULL
从重载的角度来看:
new可重载
malloc不可重载
总结
new
和delete
更适合在 C++ 中使用,因为它们支持对象初始化和析构操作,更符合 C++ 的面对对象的需求。malloc
和free
是 C 语言的函数,不支持构造和析构,适用于需要在 C++ 中直接操作内存的低级场景。
最后我说一句,以前面试问到我我不会,现在我大概说清楚了