精华内容
下载资源
问答
  • C++中new和delete用法

    2015-03-12 21:10:04
    学习了C++有半年了,中途看了又忘忘了又看。现在我开始学习Java,发现Java和C++之间还是有很多的区别的,从今天开始写博文,总结两种语言的用法,希望真的能够促进我的学习!

         学习了C++有半年了,中途看了又忘忘了又看。现在我开始学习Java,虽然说两种语言之间的语法基本是差不多的,但还是有很多的区别,从今天开始写博文,总结两种语言的用法,希望真的能够促进我的学习!


    C++总new和delete的用法总结:

           new的操作是为了在内存中开辟新的内存空间,用起来还是比较简单的,需要注意的是new指令返回的是指向新建对象的指针。

    int *p=new int;
    
    int *p=new int[3];
    
    int **p=new int[3][3];
    
    
    delete是和new配套使用的,用于释放new开辟的内存空间

    典型用法:

    delete p;
    
    delete [] p;
    

    今天在编写一个小程序用于验证C++和java的new用法区别时,遇到一个问题:

    #include<iostream>
    using namespace std;
     int main()
     {
         int *p = new int[3];
         for(int i=0;i!=3;++i)
         {
              *(p+i)=i;
         }
         int i=0;
     
         while((i++)!=3)
         {
              cout<<*p++;
         }
     
         cout<<"\n";delete p;
    
    delete [] p;
    
         delete [] p;
         return 0;
     }

    当然输出程序报错,检查原因,发现是

    cout<<*p++;

    这一句出了问题,这里改动了p指针的指向位置,导致delete释放了位置的空间。

    改正为:

    cout<<*(p+i-1)

    恢复正常。

    这是要注意的问题,不能随便改动初始地址指针的指向(反正要保证delete的开始位置不是位置空间,比如说,要是能能够在delete运行之前把p的位置改回去,其实也是可以的),用累加器倒是个不错的主意。



    第一次写博客,感觉写的东西都不能完全表达自己的想法啊。

    还有这个程序编辑到底在哪里啊,找了半天找不到,郁闷!!!!!









    
    
    展开全文
  • 主要介绍了C++中new和delete使用方法详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
  • 以下是对c++中new和delete用法进行了详细的分析介绍,需要的朋友可以过来参考下
  • c++中new和delete运算符是用于动态分配撤销内存的运算符,下面是示例,大家参考使用
  • c++中new和delete使用方法

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

        new和delete运算符是用于动态分配和撤销内存的运算符。

    一、new用法

    1.开辟单变量地址空间

       使用new运算符时必须已知数据类型,new运算符会向系统堆区申请足够的存储空间,如果申请成功,就返回该内存块的首地址,如果申请不成功,则返回零值。

        new运算符返回的是一个指向所分配类型变量(对象)的指针。对所创建的变量或对象,都是通过该指针来间接操作的,而动态创建的对象本身没有标识符名。

     一般使用格式:
            格式1:指针变量名=new 类型标识符;
            格式2:指针变量名=new 类型标识符(初始值);
            格式3:指针变量名=new 类型标识符 [内存单元个数];

    说明:格式1和格式2都是申请分配某一数据类型所占字节数的内存空间;但是格式2在内存分配成功后,同时将一初值存放到该内存单元中;而格式3可同时分配若干个内存单元,相当于形成一个动态数组。例如:

        1)new int;  //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址。int *a = new int 即为将一个int类型的地址赋值给整型指针a

        2)int *a = new int(5) 作用同上,但是同时将整数空间赋值为5

    2.开辟数组空间

        对于数组进行动态分配的格式为:

           指针变量名=new 类型名[下标表达式];
           delete [ ] 指向该数组的指针变量名;

        两式中的方括号是非常重要的,两者必须配对使用,如果delete语句中少了方括号,因编译器认为该指针是指向数组第一个元素的指针,会产生回收不彻底的问题(只回收了第一个元素所占空间),加了方括号后就转化为指向数组的指针,回收整个数组。

        delete []的方括号中不需要填数组元素数,系统自知。即使写了,编译器也忽略。

        请注意“下标表达式”不必是常量表达式,即它的值不必在编译时确定,可以在运行时确定。

        一维: int *a = new int[100];    //开辟一个大小为100的整型数组空间

        二维: int **a = new int[5][6]

        三维及其以上:依此类推.

        一般用法: new 类型 (初值)

    二、delete用法

    1. 删除单变量地址空间

           int *a = new int;

           delete a;   //释放单个int的空间

    2. 删除数组空间

           int *a = new int[5];

           delete []a;    //释放int数组空间

    三、使用注意事项

    1. new 和delete都是内建的操作符,语言本身所固定了,无法重新定制,想要定制new和delete的行为,徒劳无功的行为。

    2. 动态分配失败,则返回一个空指针(NULL),表示发生了异常,堆资源不足,分配失败。

    3. 指针删除与堆空间释放。删除一个指针p(delete p;)实际意思是删除了p所指的目标(变量或对象等),释放了它所占的堆空间,而不是删除p本身(指针p本身并没有撤销,它自己仍然存在,该指针所占内存空间并未释放),释放堆空间后,p成了空指针。

    4. 内存泄漏(memory leak)和重复释放。new与delete 是配对使用的, delete只能释放堆空间。如果new返回的指针值丢失,则所分配的堆空间无法回收,称内存泄漏,同一空间重复释放也是危险的,因为该空间可能已另分配,所以必须妥善保存new返回的指针,以保证不发生内存泄漏,也必须保证不会重复释放堆内存空间。

    5. 动态分配的变量或对象的生命期。我们也称堆空间为自由空间(free store),但必须记住释放该对象所占堆空间,并只能释放一次,在函数内建立,而在函数外释放,往往会出错。

    6. 要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问。

        用new和delete可以动态开辟和撤销地址空间。在编程序时,若用完一个变量(一般是暂时存储的数据),下次需要再用,但却又想省去重新初始化的功夫,可以在每次开始使用时开辟一个空间,在用完后撤销它。

    展开全文
  • C++中new和delete用法

    2016-10-25 16:00:26
    C++中new和delete用法 对于计算机程序设计而言,变量对象在内存的分配都是编译器在编译程序时安排好 的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个已经存在的变量或 对象。对于不能确定...

    C++中new和delete的用法

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

      new和delete运算符是用于动态分配和撤销内存的运算符。

      一、new用法

      1.开辟单变量地址空间
      使用new运算符时必须已知数据类型,new运算符会向系统堆区申请足够的存储空间,如果申请成功,就返回该内存块的首地址,如果申请不成功,则返回零值。
      new运算符返回的是一个指向所分配类型变量(对象)的指针。对所创建的变量或对象,都是通过该指针来间接操作的,而动态创建的对象本身没有标识符名。
      一般使用格式:
            格式1:指针变量名=new 类型标识符;
            格式2:指针变量名=new 类型标识符(初始值);
            格式3:指针变量名=new 类型标识符 [内存单元个数];
      说明:格式1和格式2都是申请分配某一数据类型所占字节数的内存空间;但是格式2在内存分配成功后,同时将一初值存放到该内存单元中;而格式3可同时分配若干个内存单元,相当于形成一个动态数组。例如:
      1)new int;  //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址。int *a = new int 即为将一个int类型的地址赋值给整型指针a
      2)int *a = new int(5) 作用同上,但是同时将整数空间赋值为5
      2.开辟数组空间
      对于数组进行动态分配的格式为:
      指针变量名=new 类型名[下标表达式];
           delete [ ] 指向该数组的指针变量名;
      两式中的方括号是非常重要的,两者必须配对使用,如果delete语句中少了方括号,因编译器认为该指针是指向数组第一个元素的指针,会产生回收不彻底的问题(只回
    收了第一个元素所占空间),加了方括号后就转化为指向数组的指针,回收整个数组。
      delete []的方括号中不需要填数组元素数,系统自知。即使写了,编译器也忽略。
      请注意“下标表达式”不必是常量表达式,即它的值不必在编译时确定,可以在运行时确定。
      一维: int *a = new int[100];    //开辟一个大小为100的整型数组空间
      二维: int **a = new int[5][6]
      三维及其以上:依此类推.
      一般用法: new 类型 (初值)
      二、delete用法
      1. 删除单变量地址空间
      int *a = new int;
      delete a;   //释放单个int的空间
      2. 删除数组空间
      int *a = new int[5];
      delete []a;    //释放int数组空间
      三、使用注意事项
      1. new 和delete都是内建的操作符,语言本身所固定了,无法重新定制,想要定制
    new和delete的行为,徒劳无功的行为。
      2. 动态分配失败,则返回一个空指针(NULL),表示发生了异常,堆资源不足,
    分配失败。
      3. 指针删除与堆空间释放。删除一个指针p(delete p;)实际意思是删除了p所指的目标(变量或对象等),释放了它所占的堆空间,而不是删除p本身(指针p本身并没有撤销,它自己仍然存在,该指针所占内存空间并未释放),释放堆空间后,p成了空指针。
      4. 内存泄漏(memory leak)和重复释放。new与delete 是配对使用的, delete只能释放堆空间。如果new返回的指针值丢失,则所分配的堆空间无法回收,称内存泄漏,同一空间重复释放也是危险的,因为该空间可能已另分配,所以必须妥善保存new返回的指针,以保证不发生内存泄漏,也必须保证不会重复释放堆内存空间。
      5. 动态分配的变量或对象的生命期。我们也称堆空间为自由空间(free store),但必须记住释放该对象所占堆空间,并只能释放一次,在函数内建立,而在函数外释放,往往会出错。
      6. 要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问。
      用new和delete可以动态开辟和撤销地址空间。在编程序时,若用完一个变量(一般是暂时存储的数据),下次需要再用,但却又想省去重新初始化的功夫,可以在每次开始使用时开辟一个空间,在用完后撤销它。
    展开全文
  • c++中new和delete使用方法http://www.jb51.net/article/49537.htm对于计算机程序设计而言,变量对象在内存的分配都是编译器在编译程序时安排好的,这带来了极大的不便,如数组必须大开小用,指针必须指向一个...

    c++中new和delete的使用方法

    http://www.jb51.net/article/49537.htm

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

        new和delete运算符是用于动态分配和撤销内存的运算符。

    一、new用法

    1.开辟单变量地址空间

       使用new运算符时必须已知数据类型,new运算符会向系统堆区申请足够的存储空间,如果申请成功,就返回该内存块的首地址,如果申请不成功,则返回零值。

        new运算符返回的是一个指向所分配类型变量(对象)的指针。对所创建的变量或对象,都是通过该指针来间接操作的,而动态创建的对象本身没有标识符名。

     一般使用格式:
            格式1:指针变量名=new 类型标识符;
            格式2:指针变量名=new 类型标识符(初始值);
            格式3:指针变量名=new 类型标识符 [内存单元个数];

    说明:格式1和格式2都是申请分配某一数据类型所占字节数的内存空间;但是格式2在内存分配成功后,同时将一初值存放到该内存单元中;而格式3可同时分配若干个内存单元,相当于形成一个动态数组。例如:

        1)new int;  //开辟一个存放整数的存储空间,返回一个指向该存储空间的地址。int *a = new int 即为将一个int类型的地址赋值给整型指针a

        2)int *a = new int(5) 作用同上,但是同时将整数空间赋值为5

    2.开辟数组空间

        对于数组进行动态分配的格式为:

           指针变量名=new 类型名[下标表达式];
           delete [ ] 指向该数组的指针变量名;

        两式中的方括号是非常重要的,两者必须配对使用,如果delete语句中少了方括号,因编译器认为该指针是指向数组第一个元素的指针,会产生回收不彻底的问题(只回收了第一个元素所占空间),加了方括号后就转化为指向数组的指针,回收整个数组。

        delete []的方括号中不需要填数组元素数,系统自知。即使写了,编译器也忽略。

        请注意“下标表达式”不必是常量表达式,即它的值不必在编译时确定,可以在运行时确定。

        一维: int *a = new int[100];    //开辟一个大小为100的整型数组空间

        二维: int **a = new int[5][6]

        三维及其以上:依此类推.

        一般用法: new 类型 (初值)

    二、delete用法

    1. 删除单变量地址空间

           int *a = new int;

           delete a;   //释放单个int的空间

    2. 删除数组空间

           int *a = new int[5];

           delete []a;    //释放int数组空间

    三、使用注意事项

    1. new 和delete都是内建的操作符,语言本身所固定了,无法重新定制,想要定制new和delete的行为,徒劳无功的行为。

    2. 动态分配失败,则返回一个空指针(NULL),表示发生了异常,堆资源不足,分配失败。

    3. 指针删除与堆空间释放。删除一个指针p(delete p;)实际意思是删除了p所指的目标(变量或对象等),释放了它所占的堆空间,而不是删除p本身(指针p本身并没有撤销,它自己仍然存在,该指针所占内存空间并未释放),释放堆空间后,p成了空指针。

    4. 内存泄漏(memory leak)和重复释放。new与delete 是配对使用的, delete只能释放堆空间。如果new返回的指针值丢失,则所分配的堆空间无法回收,称内存泄漏,同一空间重复释放也是危险的,因为该空间可能已另分配,所以必须妥善保存new返回的指针,以保证不发生内存泄漏,也必须保证不会重复释放堆内存空间。

    5. 动态分配的变量或对象的生命期。我们也称堆空间为自由空间(free store),但必须记住释放该对象所占堆空间,并只能释放一次,在函数内建立,而在函数外释放,往往会出错。

    6. 要访问new所开辟的结构体空间,无法直接通过变量名进行,只能通过赋值的指针进行访问。

        用new和delete可以动态开辟和撤销地址空间。在编程序时,若用完一个变量(一般是暂时存储的数据),下次需要再用,但却又想省去重新初始化的功夫,可以在每次开始使用时开辟一个空间,在用完后撤销它。

     

    展开全文
  • c++中newdelete用法总结

    万次阅读 多人点赞 2017-12-11 23:16:44
    c++中newdelete用法总结与注意事项
  • C++中 new和delete用法

    2012-05-05 18:55:08
    new和delete运算符用于动态分配撤销内存的运算符 new用法:  1. 开辟单变量地址空间  1)new int; //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址...
  • 我们在学习C++的过程,通常会遇到指针和new和delete的,这充分说明了它的重要性,今天小编就为大家带来C++中new和delete用法,希望对你学习有帮助! 一、new用法 1. 开辟单变量地址空间 使用new运算符时...
  • new和delete既是C++中的关键字也是一种特殊的运算符。这篇文章主要介绍了C++new和delete详解,需要的朋友可以参考下
  • 本文内容摘自More Effective C++(Scott Meyers 著)一书,详细解释了new和delete操作符的用法。 一、new 操作符(new operator) 人们有时好像喜欢有意使C++语言的术语难以理解。比方说new操作符(new operator)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 123,241
精华内容 49,296
关键字:

c++中new和delete的用法

c++ 订阅