new delete

对于计算机程序设计而言,变量和对象在内存中的分配都是编译器在编译程序时安排好的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象。对于不能确定需要占用多少内存的情况,动态内存分配解决了这个问题。

    new和delete运算符是用于动态分配和清理开辟的内存的运算符。

一、我们现在想开辟用来存放 int 型数据的内存,在c++中可以这样定义:

              int* p = new int;

    new 运算符是根据类型来确定需要多少字节的内存,然后找到长度合适的内存块,并返回其地址。而p 被声明为指向 int 的指针,正好用来接收 new 返回的地址。因为还未对该块内存进行初始化,所以此时的值是无效值,我们要对其进行赋值。用 new 为简单的类型分配内存时,首先需要指定需要分配的数据类型, 并返回该内存块的地址。而我们需要做的就是把该地址赋给一个对应类型的指针。

我们还可以用 new 来创建常量内存块:

       const int* pc = new const int (10);

  因为我们开辟的是常量内存块,所以指针必须是 const 类型的,创建常量内存块的同时必须进行初始化,不然这块内存的值以后无法进行修改

二、用 new 创建动态数组
1、一维数组的创建
       在C++中,创建动态数组很容易, 例如,要创建一个包含 10 个 int 元素的数组,可以这样做:

            int *a = new int[5];

       为数组分配内存的通用格式如下:

                   typeName* pointer_name = new typeName [num_elements];

                       类型* 指针名 = new 类型 [元素个数];

       我们是也可以在数组分配内存的同时初始化这个数组,但是只能把该数组的所有元素都初始化为 0 。

                  例如:   int* p_arr = new int[10]();

2、创建二维数组
 

                                                                   int** p = new (int*)[5];

                                                                   for(int i = 0;i < 5 i++)

                                                                  {

                                                                             p[i] = new int [5];

                                                                  }

三、Delete:当 new 是为简单类型分配内存后,之后使用 delete 时清理new开辟的空间时,只需要在后面加上指向内存块的指针;一定要配对的使用 new 和 delete ,否则将发生内存泄漏。当然不能使用 delete 释放不是 new 分配的内存
1.删除单变量地址空间

             例如: delete p;(上边的例子)

2.释放开辟的一维数组,如果使用 new[ ] 为数组分配内存,则应使用 delete[ ] 来释放:

              delete []a;

         注意事项:如果使用 new 时不带中括号,则使用 delete 时也不带中括号。如果使用 new 时带中括号,则使用 delete 时也带中括号。 当new 和 delete 的格式不匹配导致的后果是不确定的。如下面的例子

                 delete [ ]  pt;

                  int* ps = new int [ 5];

                delete ps;

 

3.释放二维数组

                     for(int i = 0; I < 5; i++)

                          {

                           delete  [ ] p[i];

                           }

                          delete [ ] p;

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值