new和malloc的区别1 .总体而言,(1) malloc和new都在堆上开拓内存。 malloc只负责内存的开拓,没有初始化功能,需要用户自己进行初始化。
new不仅可以开发内存,还可以像newint(1)那样进行初始化。 意味着在堆中打开了4字节的int形存储器,初始值为1;
new int[2] (; 在堆上打开一个包含两个整形元素的数组,表示初始值均为0。
)2) malloc是函数,释放内存需要像malloc(10 )那样传递字节数。 malloc返回值必须强制转换为指定类型的地址,因为它指示堆上已打开10字节的内存,返回void*并指示分配的堆内存的起始地址; new是运算符,需要指定类型才能打开内存,并返回指定类型的地址,因此不需要用力旋转。
2 .分门别类1 .需求:
new/delete是c关键字,需要编译器的支持。 malloc/free是库函数,需要头文件支持。
2 .传入:
malloc必须明确显示所需内存的大小。 如果使用new操作符请求内存,则无需指定内存块的大小。 编译器根据类型信息自己导出。
3 .返回类型:
如果malloc内存分配成功,则返回void *,需要通过强制类型转换将void *指针转换为所需的类型。 new操作符成功分配内存后,将返回对象类型指针,类型与对象严格匹配,无需进行类型转换,因此new是安全的。
4 .较低级别调用:
new首先调用operator new函数以申请足够的内存(基础使用malloc实现)。 然后调用类型构造函数,初始化成员变量,最后返回到自定义类型指针。
delete调用析构函数,然后调用operator delete函数释放内存。 基础在free中实现。
malloc/free是库函数,只能动态申请和释放内存,不能强制自定义对象的生成和析构函数的工作。 因此,malloc没有初始化功能,必须由用户自己初始化。
5 .申请失败:
如果new内存分配失败,则抛出异常(bac_alloc )。 如果malloc分配内存失败,则返回空值。