zoukankan      html  css  js  c++  java
  • new和delete操作符

    C 语言中提供了 malloc free 两个系统函数, 完成对堆内存的申请和释放。
    C++则提供了两个操作符 new delete

    1new
    new 分配内存空间时,  分配内存空间大小可能会(一般都是)大于所
    需空间大小。 因此, new 会分配至少申请大小的内存空间。
    A、 开辟单变量地址空间
    int *p = new int; //开辟大小至少为 sizeof(int)空间
    int *a = new int(5); //开辟大小至少为 sizeof(int)空间, 并初始化为 5

    int *a = new int(); //开辟大小至少为 sizeof(int)空间, 并值初始化为 0
    B、 开辟数组空间
    一维: int *a = new int[100];//开辟一个大小不少于 400 字节的整型数组空间
    二维: int (*a)[6] = new int[5][6]
    三维: int (*a)[5][6] = new int[3][5][6]

    2delete
    A、 释放单变量空间
    int *a = new int;
    delete a; //释放单个 int 的空间
    B、 释放数组空间
    int *a = new int[5];
    delete []a; //释放 int 数组空间

    C++中堆空间的分配和释放注意事项如下:
    1new/delete 是关键字, 效率高于 malloc free.

    2、 配对使用, 避免内存泄漏和多重释放。
    3 避免交叉使用。 比如 malloc 申请的空间去 deletenew 出的空间被 free;
    4、 重点用在类对像的申请与释放。 申请的时候会调用构造函数完成初始化,
    释放的时候, 会调用析构函数完成内存的清理。

    malloc new 的区别如下:
    Anew C++关键字, malloc C 语言库函数
    Bnew 以具体类型为单位进行内存分配, malloc 以字节位单位分配内存
    Cnew 在申请单个类型变量时可以进行初始化, malloc 不具备
    Dnew 在所有 C++编译器中都支持, malloc 在某些系统开发中不可调用
    Enew 能够触发构造函数的调用, malloc 仅分配需要的内存空间

    free delete 的区别如下:
    Adelete C++关键字, free 是库函数
    Bdelete 在所有 C++编译器中都支持, free 在某些系统开发中不可调用
    Cdelete 能够触发析构函数的调用, free 仅归还分配的内存空间
    D、 对象的销毁只能使用 deletefree 不适合面向对象开发
    Efree 可以归还 new 申请的内存空间, 但不会调用析构函数, 可能会造成内
    存泄漏
    Fdelete 可以释放 malloc 分配的内存空间, 但会调用析构函数, 可能会造成其他
    问题。






  • 相关阅读:
    JAVA-初步认识-第七章-static关键字-数据共享
    JAVA-初步认识-第七章-this关键字应用
    JAVA-初步认识-第七章-this关键字的使用场景二和细节
    JAVA-初步认识-第七章-this关键字的使用场景和原理图解
    未能找到Microsoft.Office.Core.MsoTriState的引用
    Windows Server 2012 FTP配置 后客户机一直登录不上
    ArcEngine 不能再打开其他表了
    CreateFeatureClass 异常,尝试读取或写入受保护的内存 Access
    ArcEngine开发异常:无当前记录
    一个文科妹子的前端悲欢编程之路
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/9647792.html
Copyright © 2011-2022 走看看