类型安全方面

  • 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的库函数
  • 二者都是在堆上分配内存,且分配的内存都要手动释放