分享

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

 星光闪亮图书馆 2020-04-22

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

目录

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

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

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

四、重定位new:


一、那么,首先回顾一下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的内存称为内存池,可以自主管理内存;如图所示:


     

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多