1.new和malloc calloc realloc比较
- malloc返回一个void指针,c++不允许将void赋值给其他任何指针,必须强转。
int arr = (int *) malloc(1,sizeof(int));
- malloc可能申请内存失败,所以必须判断返回值来确保内存分配成功。
int arr = (int *) malloc(1,sizeof(int));
if(arr=NULL)
{
perror("malloc");
return;
}
- malloc 不会调用构造函数。
2.delete与free比较
- free释放的是一块内存空间,delete释放的是一个类实例化的对象
- delete释放类时会调用类的析构函数,free则不能。
3.总结
malloc、free与new、delete都是对内存块的操作,而mallorc、free只是分配或释放内存空间,new、delete除了对内存空间的操作外还有对类的对象的操作,可以调用类的构造函数和析构函数,C++是面向对象的编程语言,因此在C++总常采用new和delete操纵内存空间而放弃C语言中常用的malloc与free。