现在的位置: 首页 > 算法 > 正文

动态内存管理 new和delete是什么意思?有什么联系

2020年01月13日 算法 ⁄ 共 850字 ⁄ 字号 评论关闭

  我们知道在C语言中用malloc,realloc,calloc在堆上开辟空间,然后用free来释放空间。使用_alloca在栈上动态开辟内存,栈上开辟的内存由编译器启动维护,不需要用户显示释放。

  1、在C++中也有动态内存开辟,利用了new和delete,下边我们了解一下:

  int main()

  {

  //动态分配4个字节的空间单个数据

  int* p1 = new int;

  //动态分配四个字节的空间并初始化为3

  int* p2 = new int(3);

  //动态分配12个字节的空间

  int* p3 = new int[2];

  //底层实现还是用free实现

  delete p1;

  delete p2;

  //必须和new[]配套使用否则会出现内存泄漏

  delete[] p3;

  return 0;

  }

  注意:

  new和delete / new[ ]和delete[ ] 一定要匹配使用!!!一定要匹配使用!!!一定要匹配使用!!!(重要的事情说三遍)

  否则会造成内存泄漏,后果很严重!!

  2、new和delete的调用过程

  new的调用过程:new ---->operator new ----> malloc

  new是malloc的封装

  delete的调用过程: delete --->operator delete --->free

  delete是free的封装

  3、malloc/free和new/delete大的区别和联系:

  他们都是动态管理内存的入口

  malloc/free是C/C++标准库函数。new/delete是C++的操作符

  malloc/free只是动态分配内存空间/释放空间。而new/delete除了分配空间还会调用构造函数和析构函数进行初始化和清理(清理成员)

  malloc/free需要手动计算类型大小且返回值为void*,new/delete可自己计算类型大小,返回对应类型的指针

  以上就是动态内存管理 new和delete的全部内容,想了解更多请关注学步园。

抱歉!评论已关闭.