• NEW和数组


    NEW
    int *p=new int [10]
    p指向了第一个int地址
    方括号内的必须是整形,但不必是常量
    还可以用一个数组类型的类型别名来分配一个数组
     
    <wiz_code_mirror>
     
     
     
     
     
        typedef int arr[10];    //arr表示10个int的数组类型
        int *p = new arr;       //分配一个10个int型的数组    p指向第一个int
     
     
    编译器执行:int *p=new int [10];
     
    初始化动态分配对象的数组
        int *p=new int [10]();    //10个值初始化为0的int 
        int *p=new int [10]{1,2,3,4,5}    //前5个已初始化,后5个默认为0
     
    动态分配一个空数组是合法的
    char *p = new char [0]    //这样是合法的,但是CP不能解引用
     
    释放动态数组
    delete p;
    delete [ ] p;
    第二条语句销毁p所指向的数组中的元素,并释放对应的内存,数组中元素的销毁时按逆序销毁
    即,最后一个元素首先被销毁,然后是倒数第二个,以此类推
    普通类型释放的时候加与不加[ ]是一样的,但是在类对象中是必须加[ ]
    如果动态分配可10个类对象 在delete时候 不加[ ] 这里就只会调用一次析构函数,会泄露掉9个对象
    加了[ ] 就会调用10次析构函数
     
    malloc free和new delete差别
    1.malloc和free是函数,new和delete是关键字(运算符)
    2.malloc是按字节申请数据,而new是按照数据类型申请数据
    3.malloc申请数据,不会调用构造函数,free也不会调用析构函数
    new在申请对象的时候,会自动调用构造函数,delete释放对象时候,会自动调用析构函数
    总结: 所以,在C++中,申请对象空间时候,应该使用new和delete去开辟释放堆空间
     
     
     
     
     
     
  • 相关阅读:
    ATCoder code festival 2016 qual C
    2019.10.26模拟赛
    2019.10.24模拟赛
    狄利克雷卷积和莫比乌斯反演学习笔记
    ljq的互测の题解
    noi.ac #39
    noi.ac #741 code
    noi.ac #65 triangle
    让别人也可以访问你电脑上的ASP.NET MVC创建的网站
    ASP.NET MVC 开发中遇到的两个小问题
  • 原文地址:https://www.cnblogs.com/Tempt/p/9987558.html
Copyright © 2020-2023  润新知