C++: new和malloc区别

本文对比了C语言中的malloc/free函数与C++中的new/delete操作符的区别,并详细阐述了它们的功能、使用方法及注意事项。此外,还介绍了new操作符的三个步骤与delete操作符的两个步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

malloc/free是 C 语言库函数,new/delete是C++的操作符。

new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。

这里的new是指new的三种形态中的operator new

1.  malloc 和 free 的函数原型:


void * malloc(size_t_size);  //malloc 函数原型

 //1.size为内存块大小,以字节为单位
//2.该函数返回值为一个指针,指向已分配大小的内存,请求失败,返回NULL。

void * free(void * ptr);     //free 函数原型

 

2. malloc/free 和 new/delete 的使用:

动态开辟内存

//开辟动态内存
int *p =(int*)malloc(sizeof(int));//malloc  不能进行初始化
free(p);

 
int *p = new int(10);//new  可以进行初始化
delete  p;



//开辟数组
int * p= (int *)malloc(sizeof(int)*10)//malloc开辟一维数组
free(p);



int * pp= (int **)malloc(sizeof(int*)*10)//malloc开辟二维数组
free(pp[i]);
free(pp);

   
int * cp = new int[10];//new开辟一维数组
delete[]cp;


int * cpp = new int*[10];//new开辟二维数组
delete[]cpp[i];
delete[]cpp;



new分配对象内存的三个步骤:

    (1)调用operator new()分配内存;

    (2)调用构造函数来构造对象并传入初值;

    (3)返回指向该对象的指针。

 

    delete释放对象内存的两个步骤:

    (1)调用析构函数;

    (2)调用operator delete释放内存。

3.malloc 和 new区别

  1. new是关键字  malloc是函数
  2. new 自由存储区域  malloc 堆
  3. new可以做初始化   malloc单纯开辟内存 
  4. new可以重载  malloc不能重载( operator new调用构造,可以重载)   
  5. new可以调用malloc  malloc不能调用new   
  6. new可以开辟常量  malloc不能
  7. new申请失败抛出异常,malloc申请失败返回NULL
  8. new返回值安全,malloc返回值是void*,半开半闭区间,不安全
  9. 开辟数组方式不同:new[],malloc
  10. new 提供内存不足处理机制,malloc不提供。

5的原因:①向前兼容,c++兼容从c的语法,所以new可以调用malloc;

                 ②new operator可以重载,可调用malloc      (operator new[](size_t size);)

如下表汇总两者区别:

 

相关面经

1.堆分配的地址空间是否连续?

逻辑地址是连续的,物理地址不连续。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值