在C++中,申请动态内存与释放动态内存,用new/delete和malloc/free都可以。而且存储方式相同,new 与 malloc 动态申请的内存都位于堆中,不能自动回收,需要对应的delete和free手动释放。malloc/free是C/C++语言的标准库函数,而new ,delete是C++的运算符,对于类的对象而言,malloc/free满足不了动态对象的要求,对象在创建的同时要自动执行构造函数,释放的同时要执行析构函数。new/delete可以执行构造函数和析构函数,而malloc和free则不行。主要区别如下:
1,new能够自动计算需要分配的内存空间,而malloc需要手工计算字节数。如 int *p1 = new int [2], int *p2 = malloc(2*sizeof(int)).
2, new与delete带具体类型的指针,malloc与free返回void类型的指针。
3,new是类型安全的,而malloc不是。
4,new调用构造函数,malloc不能;delete调用析构函数,free不能。
5,malloc/free需要库文件stdlib.h支持,new/delete不需要库文件支持。
sizeof() 属于C中的运算符,而strlen()则属于string中的函数,可以和上面对比记忆。