美文网首页
C++何时new?

C++何时new?

作者: Kael_Zhang的安卓笔记 | 来源:发表于2023-03-13 09:01 被阅读0次

    什么是new?

    • c++通过new关键字进行动态分配内存。
    • new开辟的空间存储在堆上,而我们定义的变量存储在栈上。
    • new分配的空间使用delete释放,new[] 使用 delete[]
    • new创建对象必须使用指针接收

    new的缺点

    • 使用new分配对象要贵得多。
    • 速度较慢。
    • 内存泄漏
    • 内存碎片

    new和malloc的区别

    • malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
    • 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。 由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
    • new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换;malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。
    • new内存分配失败时,会抛出bac_alloc异常,它不会返回NULL;malloc分配内存失败时返回NULL。
    • 使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算;malloc则需要显式地指出所需内存的尺寸

    何时使用new

    • 函数返回局部变量,这个变量必须是new出来的,返回该指针
    • 创建对象使用大内存时

    释放一个指针,并不会使该指针的值变为 NULL

    • 需要手动显示NULL,否则很危险

    内存泄露问题解决

    • 用完必须delete
    • 建议使用智能指针

    推荐使用智能指针

    相关文章

      网友评论

          本文标题:C++何时new?

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