new/malloc, delete/free 的区别,这个问题在面试时会经常被问到。
相同点:
都是内存的分配与释放。
不同点:
new/delete是C++ 操作符,new在分配内存时,会调用对象的构造函数,可以被重载;
malloc/free是库函数,不能被重载, 且malloc 返回值的类型是void *,所以在调用malloc 时要显式地进行类型转换,将void * 转换成所需要的指针类型。例如下面的代码,用malloc 申请一块长度为length 的整数类型的内存,程序如下:
int *p = (int *) malloc(sizeof(int) * length);
如果想了解的再深一点,那就得谈谈系统的内存分配问题了,异常复杂。