new和malloc的区别

  1. 属性
  • new/delete是关键字 需要编译器支持;
  • malloc/free是库函数,需要头文件支持。

C++中new/delete不依赖任何语句就存在;但malloc/free需要引用"iostream"。但C语言中就不存在new/delete。

  1. 参数
  • new在使用时,无需指定内存块的大小
  • 但malloc需要显式地指出所需内存的尺寸
  1. 返回类型
  • new内存分配成功时,严格返回对象类型的指针,是符合类型安全的操作符
  • malloc函数定义返回值为void*,即任何类型的指针,故需要强制类型转换
  1. 自定义类型
  • new会先调用operator new函数,申请足够的内存(通常底层使用malloc实现)。然后调用类型的构造函数,初始化成员变量,最后返回自定义类型指针

例如在创建如下结点的链表时

typedef struct node{
    string word;
    struct node* next;
}Node,*List;

int main
{
    string a ="123456";
    ...... // 为链表节点赋值
}
  • 使用malloc分配空间会报错
    Link p = (Link)malloc(sizeof(Node));
    p->word = a;
  • 而使用new则会正常运行
    Link p =new Node;
    p->word =a;
  • malloc是库函数,只能动态的申请和释放内存,无法强制要求其做自定义类型对象构造和析构工作。
  1. 重载
  • new允许重载
  • malloc不可以
  1. 内存区域
  • new从自由存储区为对象动态分配内存空间。
  • malloc从堆上动态分配内存

你可能感兴趣的:(new和malloc的区别)