new/delete和malloc/free

一、malloc/free

1、C语言:malloc free 

2、原型:void* malloc(size_t size);    void free(void *ptr);

3、malloc是函数,开辟的大小需要手动传入

二、new/delete

1、C++:new  delete

2、new和delete是关键字,开辟的大小不需要手动传入

 

三、区别:

1、new是关键字; malloc是函数

2、开辟内存大小,new开辟为自由存储区;malloc在堆上开辟

char* pc = new(&a)char(‘a’);     //pc指向a的第一个字节,在栈上开辟

3、new还可以做初始化;malloc只能开辟内存

4、new可以重载;malloc不能重载

5、new可以调用malloc;malloc不能调用new

语法:new里面第一步是operator new  ;malloc是系统提供的版本

兼容版本:向前兼容,C先出现的

6、内存开辟,new抛异常;malloc返回NULL

new不需要判断,malloc需要用if判断是否为空

int * p = new[10] ; //operator new [](size_t size);

7、new可以开辟常量;malloc不能

malloc的原型:void* malloc(size_t size);没有接收常属性的地方

new可以

8、new能够自动计算需要分配的内存空间;而malloc需要手工计算

  eg:int* p1 = new int[2];

         int* p2 = malloc(2*sizeof(int));

9、new与delete直接带具体类型的指针,malloc与free返回void类型的指针。

10、new是类型安全的;malloc不是

   eg:int p1 = new float[2];           //编译时会报错

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

11、new一般由两步构成,分别是new操作和构造。new操作对应于malloc,但new操作可以重载,可以自定义内存分配策略,不做内存分配,甚至分配到非内存设备上,而malloc不行

12、malloc/free需要库文件stdlib.h支持,new/delete则不需要库文件支持

四、注意事项

1、有资源的申请,就有资源的释放,否则就会出现资源泄漏(也称内存泄漏的问题),所以new/delete,malloc/free必须配对使用

2、delete和free被调用后,内存不会立即收回,指针也不会指向空,delete与free仅仅是告诉操作系统,这一块内存被释放了,可以用作其他用途。但是,由于没有重新对这块内存进行写操作,所以内存中的变量数值并没有发生变化,出现野指针的情况。因此,释放完内存,应该将指针指向置为空

3、malloc/free的保留

      由于C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存,所以仍然保留了malloc/free

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值