翻了一下C++课件,发现老师着重讲过new和malloc的区别和联系,反正这种东西面试也愿意问,就在这里记录一下。
它们都是用来申请空间的,申请的空间在堆中。
malloc是C语言的标准库函数,对应free()函数。而new是C++中新引入的关键字,是运算符,是语言本身的内容。和delete对应。
malloc函数返回空指针,而new返回带有类型的指针。所以malloc需要类型转换。例子如下:
int* p = new int;
int*p = (int)malloc(sizeof(int));
malloc和free不能激活构造函数和析构函数,也就是说不能为对象申请空间,而new和delete可以。这其实也是C++引入new的原因。
注意:释放内存后,应该把原来指向这块内存的指针只想NULL。