new与malloc的区别

Posted by LudoArt on August 13, 2019

new/delete与malloc/free的区别

首先,new/delete是C++的关键字,而malloc/free是C语言的库函数,后者使用必须指明申请内存空间的大小,对于类类型的对象,后者不会调用构造函数和析构函数。

其次,从源代码分析,对于

Complex* pc = new Complex(1, 2);

编译器将转化为(因编译器不同而有所不同,但基本思路一致):

Complex *pc;

void* mem = operator new(sizeof(Complex)); //分配内存,其内部调用malloc(n)

pc = static_cast<Complex*>(mem);           //转型

pc->Complex::Complex(1, 2);                //构造函数

对于

delete pc;

编译器将转化为:

Complex::~Complex(pc); //析构函数

operator delete(pc);   //释放内存,其内部调用free(pc)