zoukankan      html  css  js  c++  java
  • new-delete

    ------------恢复内容开始------------

    1 new返回的是一个指针

    2 delete:

    内置类型:( ①整数 int、short和long ②字符型 char和wchar_t③ 布尔型 bool,整型可用修饰:unsigned,浮点:float、double和long double)

    自定义类型  class,struct:(对于需要析构的结构体、类来说,delete只会对第一个元素调用析构函数。 delete[]则会对所有元素调用析构函数)


    注意,new-delete是否带中括号要成对使用,内置类型delete与delete[],效果一致,但是还是建议严格按照数组析构使用[].

    delete:调用一次析构,进行一次内存释放;

    delete【】:调用多次析构,进行一次内存释放;

     内置类型没有析构函数,所以进行一次内存释放,可以用delete也可以用delete[];但是 new int[n],使用delete(不带中括号)析构,属于标准未定义行为,不推荐;


    析构单一对象和数组对象的不同方法:

    delete [] is "vector delete" and corresponds to vector new, i.e. new[].

    You must use the matching pair of allocators. E.g. malloc/freenew/deletenew[]/delete[], else you get undefined behavior.

    3  malloc/free和new/delete的区别

    共同点:

    都是从堆上申请空间,并且需要用户手动释放。
    不同点:

    malloc和free是函数,new和delete是操作符
    malloc申请的空间不会初始化,new可以初始化
    malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可
    malloc的返回值为void*, 在使用时必须强转,new不需要,因为new后跟的是空间的类型
    malloc申请空间失败时,返回的是NULL,因此使用时必须判空,new不需要,但是new需要捕获异常
    申请自定义类型对象时,malloc/free只会开辟空间,不会调用构造函数与析构函数,而new在申请空间
    后会调用构造函数完成对象的初始化,delete在释放空间前会调用析构函数完成空间中资源的清理
    ————————————————
    转《https://blog.csdn.net/m0_50595617/article/details/116568666》

  • 相关阅读:
    BZOJ2821 作诗(Poetize) 【分块】
    BZOJ2724 蒲公英 【分块】
    Codeforces 17E Palisection 【Manacher】
    BZOJ2565 最长双回文串 【Manacher】
    Codeforces 25E Test 【Hash】
    CODEVS3013 单词背诵 【Hash】【MAP】
    HDU2825 Wireless Password 【AC自动机】【状压DP】
    HDU2896 病毒侵袭 【AC自动机】
    HDU3065 病毒侵袭持续中【AC自动机】
    HDU2222 Keywords Search 【AC自动机】
  • 原文地址:https://www.cnblogs.com/8335IT/p/14915861.html
Copyright © 2011-2022 走看看