在C++中,new和malloc都是用来动态分配内存的,但是它们有以下几点不同:
- 申请内存的方式不同:malloc需要显式填入申请内存的大小,而new则无需显式填入申请的内存大小,new会根据new的类型分配内存。
- 返回类型不同:new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,而malloc内存分配成功则是返回void*,需要通过强制类型转换将void*指针转换成我们需要的类型。
- 内存分配位置不同:new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。
除此之外,还有一些其他的区别:
- new/delete是C++的操作符,而malloc/free是C语言的库函数。
- new操作符可被重载,而malloc函数不可被重载。
在使用new和malloc时,需要注意以下几点:
- 动态分配的内存需要手动释放。对于使用new动态分配的内存,需要使用delete进行释放;对于使用malloc动态分配的内存,需要使用free进行释放。
- 动态分配的内存需要谨慎使用,避免内存泄漏或者使用已经被释放的内存。
- 在C++程序中使用new会比malloc更加安全可靠,因为new是符合类型安全性的操作符,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换。而malloc则返回void*,需要通过强制类型转换将void*指针转换成我们需要的类型。
总的来说,new和malloc都是用来动态分配内存的,但是它们的申请内存的方式、返回类型和内存分配位置不同。在使用时需要注意手动释放动态分配的内存,并且在C++中使用new会比malloc更加安全可靠。