类型安全方面
- new是类型安全的,malloc不是。new在分配内存时,会考虑到类型的大小,返回正确的类型指针,而malloc只是分配一块内存,不会考虑类型的大小,返回void*指针,因此需要强制类型转换,如:
1
int* p = (int*)malloc(sizeof(int));
构造函数和析构函数
- new在分配内存时,会调用类的构造函数,而malloc不会,因此使用new时,可以保证对象的构造函数被调用,而malloc不会,需要手动调用构造函数。
- 在释放内存时,new会调用类的析构函数,malloc不会,需要特别小心的释放内存,防止内存泄漏
异常处理
- new在分配内存时,如果分配失败,会抛出异常std::bad_alloc
- malloc不会,只会返回NULL,要手动检查
重载
- new可以重载,malloc不能重载
联系
- new和delete是C++的关键字,malloc和free是C的库函数
- 二者都是在堆上分配内存,且分配的内存都要手动释放