zoukankan      html  css  js  c++  java
  • malloc/free 与 new/delete同与不同

    一、相同点

      1.都是从堆上申请内存,由程序员来掌控这段内存的申请与释放。

      2.对于内置类型,两者使用没有太大区别。

    二、不同点

         1.malloc/free是C++/C语言的标准库函数,需要库支持;new/delete是C++运算符。这一点更深刻的意义在于C++中,运算符可以重载:你可以指定new分配空间真正的地方;你可以指定分配空间后,完成特定的动作;你可以指定分配失败后,完成特定的动作;你可以指定delete后,触发某些特定的事件。

         2.使用方法不同:malloc/free需要调用者来计算具体需要分配多少空间,malloc不关心分配的是什么类型,他只关心内存的字节总数,所以他返回的也是void*类型的指针;new/delete就简单得多了,可以识别分配的类型,只需要告诉分配的个数即可。

    malloc/free:
    
    int *p1 = (int*)malloc(sizeof(int)*10);
    
    free(p1);
    
    new/delete:
    
    int *p1 = new int[10];
    
    delete []p1;

      3.malloc/free类型不安全;new/delete类型安全。

    malloc/free:
    int* p = (int *)malloc(sizeof(float)*2); // 编译时无法指出错误
    
    new/delete:
    int* p = new float[2]; // 编译时指出错误

      4.malloc/free只是单纯的分配和释放内存;new/delete在此基础上,会调用该类型的构造函数和析构函数。

    class  Obj
    {
    public  :
          Obj( ) { cout  <<  “Initialization”  <<  endl; }
           ~ Obj( ) { cout  <<  “Destroy”  <<  endl; }
           void  Initialize( ) { cout  <<  “Initialization”  <<  endl; }
          void  Destroy( ) { cout  <<  “Destroy”  <<  endl; }
    };
    
    void  UseMallocFree( )
    {
          Obj   * a  =  (obj  * ) malloc( sizeof ( obj ) );  
          a -> Initialize(); 
           ...
          a -> Destroy(); 
          free(a); 
    }
    
    void  UseNewDelete( void )
    {
        Obj   * a  =   new  Obj;                                           
          … 
        delete a; 
    }

    三、一些补充

      既然new/delete的功能完全覆盖了malloc/free,为什么C++还保留malloc/free呢?因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。在C++编程中,尽量使用new/delete,因为他有更多的安全性检查,会在幕后做更多的工作,并且对于自定义类型,也是必须使用new/delete的。

  • 相关阅读:
    js中的原生Ajax和JQuery中的Ajax
    this的用法
    static的特性
    时政20180807
    java compiler没有1.8怎么办
    Description Resource Path Location Type Java compiler level does not match the version of the installed Java project facet Unknown Faceted Project Problem (Java Version Mismatch)
    分词器
    [数算]有一个工程甲、乙、丙单独做,分别要48天、72天、96天完成
    一点感想
    解析Excel文件 Apache POI框架使用
  • 原文地址:https://www.cnblogs.com/cauchy007/p/4525417.html
Copyright © 2011-2022 走看看