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》

  • 相关阅读:
    转:阅读代码
    转:三个教程
    转:C/C++程序员简历模板
    转:对于一个字节(8bit)的变量,求其二进制表示中“1”的个数
    内存偏移
    转:用C++实现的一种插件体系结构-----概述
    转:用异或实现两个数的交换的问题
    转:二级指针
    转:《链接、装载与库》里的一个错误:关于调用栈
    转:你应当如何学习C++(以及编程)(rev#1)
  • 原文地址:https://www.cnblogs.com/8335IT/p/14915861.html
Copyright © 2011-2022 走看看