malloc\free new\delete

共同点

功能

都是管理空间的一种手段(堆空间?)

区别

性质

malloc\free

c中的函数

new\delete

c++中的运算符,属于关键字(语言本身的东西)

执行

new、delete
new
  1. 调用operator new(对malloc的一个封装)
  2. 调用析构函数(生成对象)【编译器自动调用】
  3. 返回相应的指针
delete
  1. 调用析构函数
  2. 释放空间
malloc、free

从new和delete中可以看出,他们是c++封装前的函数,很单纯的内存管理,不调用构造函数和析构函数。

错误

new

new发生错误会抛出异常

malloc

malloc发生错误只会返回一个空指针NULL

delete和free在成片空间上的释放

delete的使用(在释放时成片空间要加一个[])

//普通空间
int *p = new int;
delete p;
//成片空间
int *p = new int[10];
delete [] p; 

free的使用(没有区别)

普通空间
int *p = (int *)malloc(sizeof(int));
free(p);
//成片空间
int *p = (int *)malloc(sizeof(int) * 10);
free(p);

如果delete释放成片空间时,没有加上[],会内存泄漏(只释放了开头那一块空间)
而free就不同了,free可以释放申请全部成片空间

关系

new和delete可以看成c++对c中malloc、free函数和其它操作的一些封装

发布了39 篇原创文章 · 获赞 4 · 访问量 5757

猜你喜欢

转载自blog.csdn.net/weixin_45725137/article/details/105205536