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

       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开辟

 int *p = (int *)malloc(sizeof(int)*10);
 free(p);

    (2)c++中new开辟

    int *p3 = new int[10];//动态开辟一个长度为10的数组
    delete [] p3;
    
    int *p4 = new [10]();//动态开辟一个长度为10的数组并初始化为0
    delete [] p4;
    
    const int *p5 = new const int (10);//开辟常量内存块,且一定要初始化,这里初始为10
    delete [] p5;
    
    const int p6 = new const int[10]();
//动态开辟常量数组并初始化为0  可以开辟成功,但一般情况不用,因为这里的数组值全为0 ,并且不能对其进行修改
    delete [] p6;

2、动态开辟二位数组

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

    (1)c中使用malloc开辟

    int **p = (int **)malloc(sizeof(int *)*10);
    for(int i = 0;i < 10;i++)
    {
        p[i] = (int*)malloc(sizeof(int)*10);
    }
    for(int i = 0;i < 10;i++)
    {
        free(p[i]);
    }
    free p;

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

    int **p1 = new int *[10];
    for(int i = 0;i < 10;i++)
    {
        p1[i] = new int [10];
    }
    for(int i = 0;i < 10;i++)
    {
        delete[] p1[i];
    }
    delete[] p1;

四、重定位new:

    int a;

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

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

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


    

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值