new与malloc的区别

时间:2021-05-21 05:14:21

  看起来,它们的不同只是new比malloc用起来更方便而已。仅仅是这样吗?不是吗?

  1 来源不同:

    1)new/delete是C++中的操作符,而malloc/free是C中的标准库函数,需要库文件支持。为了保证程序的可读性和正确性,new与delete、malloc与free要配对使用;

    2)可重载自定义:重载new/delete操作符,可实现在申请内存的时候自定义分配策略,如分配后自动初始化等;

    3)new/delete可自动调用构造/析构函数,而malloc/free不会。

  2 用法不同:

    1)new不需要程序员计算内存,而malloc需要程序员计算出具体的字节数;

    例如,申请一个长度为4的int数组的不同:

      int *pArr=new int(4)

      int *pArr=(int*)malloc(4*sizeof(int));

    2)new返回的指针类型与申请类型一致,而malloc并不识别申请的内存是什么类型,它只关心申请空间的大小,返回指针类型为void*。

  3 new是类型安全的,malloc不是。如:

    int *p = new float[2];   //编译时错误

    int *p = malloc (2*sizeof(float));  //编译时无法指出错误