文章目录
共同点
功能
都是管理空间的一种手段(堆空间?)
区别
性质
malloc\free
c中的函数
new\delete
c++中的运算符,属于关键字(语言本身的东西)
执行
new、delete
new
- 调用operator new(对malloc的一个封装)
- 调用析构函数(生成对象)【编译器自动调用】
- 返回相应的指针
delete
- 调用析构函数
- 释放空间
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函数和其它操作的一些封装