​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​​


​​}​​