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

    2017-08-11 16:34:22
    //new和delete的用法 void main() { //new的第一种用法,将p[0]赋值为5 int *p=new int(5); cout delete p;//释放单个指针  //new的第二种用法 int *q = new int; delete q; //new的第三种用法,开辟大小...
    #include<iostream>
    using namespace std;
    //new和delete的用法
    void main()
    {
    //new的第一种用法,将p[0]赋值为5
    int *p=new int(5);
    cout<<p[0]<<' '<<p<<' '<<&p<<' '<<&p[0]<<endl;
    delete p;//释放单个指针
        //new的第二种用法
    int *q = new int;
    delete q;
    //new的第三种用法,开辟大小为5的内存空间
    int *k = new int[5];
    delete []k;//释放整个数组


        //new一个多维数组,开辟一个6X5的二维数组
    //方法一
    int **d = new int*[6];
    for(int i=0;i<6;i++)
    d[i] = new int[5];
        for(int i1=0;i1<6;i1++)
    delete d[i1];
    delete d;
        //方法二
    int (*d1)[5] = new int [6][5];
    d1[5][4] = 8;
    delete []d1;
    }
    展开全文
  • 以下是对c++中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可以动态开辟和撤销地址空间。在编程序时,若用完一个变量(一般是暂时存储的数据),下次需要再用,但却又想省去重新初始化的功夫,可以在每次开始使用时开辟一个空间,在用完后撤销它。
    展开全文
  • new delete 的用法完美解析

    万次阅读 多人点赞 2018-02-09 11:27:14
    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++ new和delete 的用法

    2018-03-30 20:03:02
    newdelete是C++预定操作符,它们一般需要配套使用。new用于从堆内存申请一块空间,一般动态用于动态申请内存空间,即根据程序需要,申请一定长度空间,而delete则是将new申请空间释放。1.new的使用使用new...
    new与delete是C++预定的操作符,它们一般需要配套使用。new用于从堆内存申请一块空间,一般动态用于动态申请内存空间,即根据程序需要,申请一定长度的空间,而delete则是将new申请的空间释放。
    1.new的使用

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


     一般使用格式:

          格式1:指针变量名=new 类型标识符; 例如: int  * p1=newint;

          格式2:指针变量名=new 类型标识符(初始值);例如:int  *p2=new int(2);//*p2初始化值是2

          格式3:指针变量名=new 类型标识符 [内存单元个数]; 例如:  int *p3=new int[1000] //申请1000个单位内存空间

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


    2.new和malloc的区别

    1. new是运算符 malloc是函数

    2. new基于类型 malloc基于字节

    3. New自动调用构造函数 同时初始化内存   malloc不行

    New 申请内存失败会抛出异常 malloc申请内存失败会返回NULL


    3.delete的使用

      释放一个数组时, delete [ ]指向该数组的指针变量名;
       两式中的方括号是非常重要的,两者必须配对使用,如果delete语句中少了方括号,因编译器认为该指针是指向数组第一个元素的指针,会产生回收不彻底的问题(只回收了第一个元素所占空间),加了方括号后就转化为指向数组的指针,回收整个数组。
        delete[]的方括号中不需要填数组元素数,系统自知。即使写了,编译器也忽略。
    2.int*p=new int(0);
      delete p;
    注意这时释放了p所指的目标的内存空间,也就是撤销了该目标,称动态内存释放(dynamic memory deallocation),但指针p本身并没有撤销,该指针所占内存空间并未释放,当堆上内存释放后,p成为野指针,所以一般在delete 指针之后 要将指针置空。
    例如:
    1. 删除单变量地址空间

          int *a = new int;

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

    2. 删除数组空间

          int *a = new int[5];

          delete []a;   //释放int数组空间
    4.注意事项
    1. new和delete都是内建的操作符,语言本身所固定了,无法重新定制,想要定制new和delete的行为,徒劳无功的行为。

    2. 动态分配失败,则返回一个空指针(NULL),表示发生了异常,堆资源不足,分配失败,还有一种办法是 失败后 抛出异常。

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

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

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

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

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

    2017-04-18 21:13:35
     对于计算机程序设计而言,变量和对象在内存中分配都是编译器在... new和delete运算符是用于动态分配和撤销内存运算符。  一、new用法  1.开辟单变量地址空间  使用new运算符时必须已知数据类型,new
  • C++:New和Delete的用法

    2018-04-29 15:29:10
    //C++里 数组new 和delete问题 //对于数组new的不同方式 和不同释放方法 //---------------------------------------------------------------- // 创建字符指针数组 char **parr = new char*[100]; //注意...
  • c++中new和delete的用法

    2016-05-10 15:04:16
    对于计算机程序设计而言,变量和对象在内存中分配都是编译器在... new和delete运算符是用于动态分配和撤销内存运算符。  一、new用法  1.开辟单变量地址空间  使用new运算符时必须已知数据类型,new运算符会
  • 对于计算机程序设计而言,变量和对象在内存中分配都是编译器... new和delete运算符是用于动态分配和撤销内存运算符。  一、new用法  1.开辟单变量地址空间  使用new运算符时必须已知数据类型,new运算符...
  • 前几天做导师分配一个小活时候,一个bug自己调试了好久,后来发现是一个地方用new和delete出现了问题。所以今天就把我认为用到new和delete时需要注意地方写下吧。  1、new是在堆中分配一段内存,堆中内...
  • C++之new和delete的用法

    2013-11-02 22:13:26
    new和delete用于动态的分配和撤销内存。 new的用法:  1.单个空间  int *a = new int;  int *a = new int(5); //分配一个空间,且给*a赋值为5  2.多个空间  int *a = new
  • new和delete的用法(C++)

    2018-08-13 10:47:24
    new来分配内存 在c语言中我们可以使用malloc来...我们要告诉new,需要为哪种类型数据分配内存,new找到一个长度正确内存,并返回该空间地址。 int *p=new int; new int告诉我们需要开辟一个int大小内...
  •   C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力而且使用起来比较麻烦,因此C++又提出了自己内存管理方式:通过new和delete操作符进行动态内存管理。 假设我们现在要在堆上建立一个Test类对象...
  • C++中 new和delete的用法

    2012-05-05 18:55:08
    new和delete运算符用于动态分配和撤销内存运算符 new用法:  1. 开辟单变量地址空间  1)new int; //开辟一个存放数组存储空间,返回一个指向该存储空间地址.int *a = new int 即为将一个int类型地址...
  • new”是C++一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到new有关内容做一个总结。 new的过程 当我们使用关键字new在堆上动态创建一个对象时,...
  • 请问这个p2指针怎么删除,food是一个定义好类 food *p1,*p2; p2=p1=new food(); p2->add(); p1->add(); delete p2;//这里有错 p1->print(); p2->print();
  • C++中newdelete的用法

    千次阅读 2014-11-28 23:32:05
    在学习了一个阶段之后,总结一下new和delete的用法,指针还没有摸透,待日后总结。 1.new和delete有什么用? new和delete是C++中的两个操作符,new用于给单个对象或者数组,结构等分配内存,在内存使用完后,用...
  • 关于new和delete的详细用法。详细用法哟!new是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,
  • new和delete用法

    千次阅读 2017-03-06 13:53:30
    在 C++ 中,你也许经常使用 new delete 来动态申请释放内存,但你可曾想过以下问题呢? new delete 是函数吗?new [] delete [] 又是什么?什么时候用它们?你知道 operator new operator delete ...
  • new和delete的基本用法

    2013-10-17 20:48:00
     new和delete是C++中用来动态管理内存分配运算符,其用法较为灵活。如果你对它们几种不同用法感到困惑,混淆,那么接着看下去吧。 功能一:动态管理单变量/对象空间  下面例子使用new为单个变量/对象开辟...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 623
精华内容 249
关键字:

new和delete的用法