美文网首页
c++中的new和delete

c++中的new和delete

作者: 潘雪雯 | 来源:发表于2020-05-19 13:49 被阅读0次

    用法。

    • new初始化
      new int;开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)。
      new int(100);开辟一个存放整数的存储空间,并指定该整数的初值为100,返回一个指向该存储空间的地址(即指针)。
    int *p = (int *)malloc(sizeof(int));
    *p = 10;
    int *p2 = new int;//分配基础类型
    *p = 20;    
    int *p3 = new int(30);
    

    new char[10];开辟一个存放字符数组的存储空间,返回首元素的地址(即指针)
    new int[5][4];开辟一个存放二维整型数组的空间,返回一首元素的地址(即指针)

    int *p = (int *)malloc(sizeof(int) * 10);
    p[0] = 1;
    free(p);
    //c++分配数组
    int *pArray = new int[10];
    pArray[1] = 2;
    delete [] pArray;//数组不要把[]忘记 
    

    *float p = new float(3.14159)开辟一个存放单精度数的空间,并指定该实数的初值为3.14159,将返回该空间的地址(即指针)赋给指针变量p。

    • new和delete运算符使用格式:


      image.png
    • 用new分配数组空间时不能指定初值,用户可以根据指针的值判断分配空间是否成功。
    • 执行delete运算符时,在释放内存空间之前,自动调用析构函数,完成相关善后清理工作。

    new、delelte和malloc、free的不同点

    1. c语言中malloc和free是库函数,
      c++中new和delete是运算符
    2. malloc不会调用类的析构函数,new能执行类的构造函数
      free不会调用类的析构函数,delete能执行类的析构函数
    3. new和delete操作符分配内存成功时返回对象类型的指针,分配失败时会抛出bac_alloc异常,不会返回NULL。
    4. 申请的内存所在位置: new从自由存储区上为对象动态分配内存,malloc函数从堆上动态分配内存
    5. new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算,而malloc需要显示的指出所需内存的尺寸malloc(sizeof(A))

    相关文章

      网友评论

          本文标题:c++中的new和delete

          本文链接:https://www.haomeiwen.com/subject/mnfbohtx.html