New和Delete的区别

New和malloc的区别?

C中动态开辟内存: malloc函数开辟 free函数释放

Void* malloc(size_t size)

Void free(void* ptr)

C++中动态开辟内存:New关键释放字开辟  Delete

New 关键字

Int *p=new int;

Delete 关键字

Delete p;

1、New是关键字  malloc是函数

2、开辟的空间位置 malloc在堆上   new不一定在堆上(堆是操作系统所维护的一块特殊的内存,它提供了动态分配内存的,使用mslloc()  free()来申请/释放内存。而自由存储是C++中通过new和delete动态分配和释放对象的概念。基本上,所有的C++编译器默认使用堆来实现自由存储。也就是说,默认的全局运算符new和delete也许会使用malloc和free的方式申请和释放存储空间,也就是说自由存储区就位于堆上。但程序员可以通过重载操作符,改用其他内存来实现自由存储)堆是操作系统维护的一块内存,是一个物理概念。而自由存储是c++中通过new和delete动态分配和释放对象的存储区,是一个逻辑概念。

Int a=10;

Char*pc=new(&a)char(‘a’);//重定义new

New开辟的内存叫自由存储区域

3、new不仅分配内存,还可以做初始化。Malloc只是单纯的分配内存。  

4、new(实现有两步),可以重载,malloc不能重载

通过operatoer new 这个该函数开辟内存

   调用构造

5、new是c++关键字  malloc是C的函数

Malloc不能调用new

向前兼容 new 可以调用malloc

6、new可以开辟常量内存块,malloc不能开辟常量

Int *p=new const int(20);

New []  单个内存释放delete  不会有内存泄漏产生:

Int *p=new int[10];

Delete p;

 

int* ptest =new Test[10];  以数组的方式开辟对象内存

Delete ptest    释放时只释放了一个对象,会产生错误。

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值