C++——malloc/free和new/delete的区别

作者:小 琛
欢迎转载,请标明出处

使用方法

malloc和free

void Test ()
{
 int* p1 = (int*) malloc(sizeof(int));
 free(p1);
 
 int* p2 = (int*)calloc(4, sizeof (int));
 int* p3 = (int*)realloc(p2, sizeof(int)*10);//扩容
 
 free(p3 );//释放内存
}

new和delete

void Test()
{
 // 动态申请一个int类型的空间
 int* ptr4 = new int;
 
 // 动态申请一个int类型的空间并初始化为10
 int* ptr5 = new int(10);
 
 // 动态申请10个int类型的空间
 int* ptr6 = new int[10];
 
 delete ptr4;
 delete ptr5;
 delete[] ptr6;
 }

malloc/free和new/delete的区别

共同点:

  • 都是从堆上申请空间,并且需要用户手动释放

不同点:

  1. malloc和free是函数,new和delete是操作符
  2. malloc申请的空间不会初始化,new可以初始化
  3. malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可
  4. malloc的返回值为void*, 在使用时必须强转,new不需要,因为new后跟的是空间的类型
  5. malloc申请空间失败时,返回的是NULL,因此使用时必须判空,new不需要,但是new需要捕获异常
  6. 申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new在申请空间后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理

在面试中遇到该问题,加黑字体必须回答,后续补充即可

发布了63 篇原创文章 · 获赞 11 · 访问量 2218

猜你喜欢

转载自blog.csdn.net/qq_44745063/article/details/105215145