打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
03、【c++】浅析new和delete关键字

       new和delete是在c++中用来动态开辟和释放内存的关键字;这就不得不提起在c中经常使用的malloc函数和free函数开辟和释放内存;

目录


一、那么,首先回顾一下malloc和free的用法定义和特点:

定义:

    malloc函数原型:void * malloc(size_t size);用来在堆上动态开辟内存;

    free函数原型:void free(void *ptr);用来释放内存;

动态开辟的特点:

    1.堆上开辟;

    2.是一个函数;

    3.不可初始化;

    4.开辟失败,指针放回空;

    5.不能开辟常量内存块;

例如:

    int *p1 = (int*)malloc(sizeof(int));

    free(p1);

二、接下来,我们看看c++中new和delete关键字的定义和特点;

定义:

    new:用来动态开辟内存

    delete:用来释放空间以及资源;

动态开辟的特点:

    1.在自主存取区域内开辟;

    2.是一个关键字;

    3.可初始化;

    4.开辟失败后,会抛出异常;

    5.可开辟常量内存块;

例如:int *p2 = new int(10); //初始化为10;

            delete p2;

三、那么,我们来看一下new和delete的具体使用:

1、动态开辟一维数组:

    (1)c中malloc开辟

  1.  int *p = (int *)malloc(sizeof(int)*10);
  2.  free(p);

    (2)c++中new开辟

  1.  int *p3 = new int[10];//动态开辟一个长度为10的数组
  2.     delete [] p3;

  3.     int *p4 = new [10]();//动态开辟一个长度为10的数组并初始化为0
  4.     delete [] p4;

  5.     const int *p5 = new const int (10);//开辟常量内存块,且一定要初始化,这里初始为10
  6.     delete [] p5;

  7.     const int p6 = new const int[10]();
  8. //动态开辟常量数组并初始化为0 可以开辟成功,但一般情况不用,因为这里的数组值全为0 ,并且不能对其进行修改
  9.     delete [] p6;

2、动态开辟二位数组

(思路:先开辟一维数组,再在所开辟的一位数组的基础上再循环开辟)

    (1)c中使用malloc开辟

  1.  int **p = (int **)malloc(sizeof(int *)*10);
  2.     for(int i = 0;i < 10;i++)
  3.     {
  4.         p[i] = (int*)malloc(sizeof(int)*10);
  5.     }
  6.     for(int i = 0;i < 10;i++)
  7.     {
  8.         free(p[i]);
  9.     }
  10.     free p;

    (2)c++中使用new开辟

  1.     int **p1 = new int *[10];
  2.     for(int i = 0;i < 10;i++)
  3.     {
  4.         p1[i] = new int [10];
  5.     }
  6.     for(int i = 0;i < 10;i++)
  7.     {
  8.         delete[] p1[i];
  9.     }
  10.     delete[] p1;

四、重定位new:

    int a;

    char *p = new(&a)char('a');

    在a的内存池中,开辟一块内存给p使用,即p指向该内存,此时内存为char型

    将a的内存称为内存池,可以自主管理内存;如图所示:


     

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C 知识点
也谈野指针
C++笔试面试准备(整理)
C基础—指针/指针与动态变量/指针与数组/指针与函数
《C语言深度剖析》关键字介绍七
「C语言重点难点精讲」关键字精讲2
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服