C++何时new?

什么是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
  • 建议使用智能指针

推荐使用智能指针

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载:http://www.cnblogs.com/fly1988happy/archive/2012/04/26...
    冰吉凌阅读 3,372评论 0 4
  • new实际上执行了什么操作,可能在什么步骤出现异常? 当我们使用关键字new在堆上动态创建一个对象时,它实际上做了...
    宋大壮阅读 4,558评论 0 0
  • 一. new 和delete区别 C语言提供了malloc和free两个系统函数,完成对堆内存的申请和释放。而C+...
    NowBurn阅读 4,225评论 0 1
  • 一、new & delete 回顾malloc/free, malloc申请而来的只是内存,严格地说并不是“对象”...
    我阿郑阅读 3,218评论 0 0
  • new和delete的内部实现 C++中如果要在堆内存中创建和销毁对象需要借助关键字new和delete来完成。比...
    欧阳大哥2013阅读 18,952评论 1 16