
new和malloc都是用于动态分配内存的函数,但是在C++中使用new,而在C语言中使用malloc。尽管它们的用途相似,但是它们有以下几个主要区别和差异点:
1. 语法:
new是C++中的一个关键字,在使用时需要在后面跟着要分配内存的类型,例如:int* p = new int;
而malloc是C语言中的一个库函数,需要包含#include头文件,并且使用时需要在括号内指定分配内存的大小和所需的类型的强制类型转换,例如:int* p = (int*)malloc(sizeof(int));
2. 返回值:
new分配内存成功之后,会直接返回分配内存的地址,而且不需要进行强制类型转换;
malloc分配内存成功之后,返回的是指向分配内存的指针,需要进行强制类型转换。
3. 构造函数和析构函数的调用:
使用new分配内存后,会自动调用对象的构造函数进行初始化,而在释放内存时,会自动调用对象的析构函数进行资源的释放;
使用malloc分配内存后,不会调用对象的构造函数,需要手动调用构造函数进行初始化,并且在释放内存时,也需要手动调用析构函数进行释放资源。
4. 内存分配失败:
new在分配内存失败时,会抛出std::bad_alloc异常;
malloc在分配内存失败时,返回NULL。
5. 内存大小:
new在分配内存时,不需要显示指定所需要分配的内存大小,会根据类型自动计算所需的内存大小;
malloc需要通过sizeof运算符来显式指定所需要分配的内存大小,例如:malloc(sizeof(int) * 10)。
6. 可重载性:
new是内存分配运算符,可以通过重载的方式进行自定义,可以根据需要调用不同的分配策略;
malloc是C标准库提供的函数,无法进行重载。
7. 对于数组的分配:
new可以方便地分配数组,并且可以使用delete[]释放内存;
而malloc分配数组时,需要手动计算所需的内存大小,并且在释放内存时,使用free函数进行释放。
总结:
new和malloc都是用于动态分配内存的函数,但是在使用时存在一些区别和差异。new在C++中使用较为方便,可以自动调用构造和析构函数,而且不需要进行强制类型转换。而malloc在C语言中使用较为广泛,但是需要手动管理构造和析构函数的调用,以及进行内存大小的计算。在使用new和malloc时需要根据实际需求进行选择,并且需要注意内存的释放,避免内存泄漏。