- 申请的内存所在位置不同:new在自由存储区,malloc在堆;
- 返回类型的安全性:new返回对象指针,malloc返回void *;
- 是否调用类的构造函数、析构函数:new调用,malloc不调用
- 失败时的返回值:new失败时抛出异常bad_alloc,malloc返回null;
- 是否需要指定大小:malloc需要指定大小;
- 对数组的操作:new会对数组中的每一个元素调用其构造函数,malloc并不知道所申请区域要存放的内容;
- 是否可以互相调用:new可以调用malloc,malloc不能调用new;
- 是否可以重载:new可以重载;
- 能否直观的重新分配内存:new不可以,malloc可以利用realloc实现;
- 客户能否对分配失败进行处理:new可以通过set_new_handler指定new_handle(一个没有参数没有返回值的函数指针)来处理。