C++的new和delete的详解以及使用new来创建动态数组

使用new来分配空间

  • 在C语言中,可以用库函数malloc()来分配内存;在C++中仍然可以这样做,但在C++中使用new运算符

  • 我们只用告诉new,需要为哪种数据类型分配空间,new将找到一个长度正确的内存块(根据类型来确定需要多少字节的内存),并返回该内存块的地址,然后我们需要将该地址赋给一个指针,如:

    int * pn = new int;
    

    该情况下,只能通过指针进行访问。

    我们说pn指向一个数据对象(指的是为数据项分配的内存块),该数据对象可以是结构,也可以是基本类型

  • 使用这种方式的好处是,我们对程序在管理内存方面有更大的控制权

  • new是从被称为(heap)或自由存储区(freee store)的内存区域分配内存

使用delete释放内存

  • delete使得new在使用玩内存后,能够将其归还共给内存池

  • 使用delete时,后面要加上指向内存块的指针,如:

    int * ps = new int;
    ...
    delete ps;
    

使用new来创建动态数组

  • 如果通过声明来创建数组,则在程序被编译时将它分配给内存空间,不管我们是否使用数组,数组都在哪里,占用了空间

  • 但是在使用new时,如果在运行阶段需要数组,则创建它,如果不需要则不创建,还可以在运行时选择数组的长度。

  • 创建方法:

    int * psome = new int [10];
    ...
    delete [] psome;
    

    这里的psome指向的时数组的一个元素

  • 我们还可以使用数组名的方式来使用指针名

    部分代码:

    int * p = new int [3];
    p[0] = 1;
    p[1] = 2;
    p[3] = 3;
    cout << p[1] << "\n"//结果为2
    p = p + 1;
    cout << p[1] << "\n"//结果为3
    //这里将p加1后导致它指向第2个元素而不是第1个
    p = p - 1;
    delete [] p;
    //将它减1后,指针将指向原来的值,这样程序便可以给delete[]提供正确的地址。
    

new和delete在使用时需要的注意事项

  • 不要使用delete来释放不是new分配的内存
  • 不要使用delete释放同一个空间两次
  • 如果使用==new[]为数组分配内存,则应该是使用delete[]==来释放
  • 对空指针应用delete是安全的
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦生dwu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值