malloc/free与new/delete的使用方法与区别

Malloc 和 free 是C++/C语言中的标准函数而new/delete是C++中的操作符。他们都能够在C++中动态的分配内存和释放内存资源。
malloc/free不能满足动态对象的创建,因为对象在创建的时候会调用构造函数进行初始化,在生命周期结束的时候又要调用析构函数进行析构以释放资源。
malloc()和free()是库函数而非操作符,编译器对它们没有控制权限,因此malloc()和free()函数也就无力承担强加于他们身上构造和析构函数的任务。

因此,C++就出现了用new操作符来完成对象的动态内存分配以及对象的初始化工作,delete去清理垃圾以及完成整个对象在生命周期结束时的垃圾回收清理工作工作。

new/delete不是库函数他们是操作符(这里补充一句,sizeof也是操作符)。

    下面让我们来看一些代码来帮我们很好的理解一下malloc/free 和 new/delete 是如何对对象进行资源管理的。

 
class Obj
{
  public :
          Obj(void){ cout << “Initialization” << endl; }
          ~Obj(void){ cout << “Destroy” << endl; }
          void    Initialize(void){ cout << “Initialization” << endl; }
          void    Destroy(void){ cout << “Destroy” << endl; }
  };
   
  void UseMallocFree(void)
  {
      Obj  *a = (obj *)malloc(sizeof(obj));   // allocate memory
      a->Initialize();                                     // initialize
  
      //…
  
      a->Destroy();   // clean up
      free(a);        // free allocated memory
  }
   
  void UseNewDelete(void
  {
  
      Obj  *a = new Obj;  // allocate memory and initialize
  
      //…
  
      delete a;                   // clean up and free allocated memory
  }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值