new 和 malloc区别
- new/delete是关键字,需要编译器的支持;malloc/free是函数,需要包含头文件;
- new和malloc都是在堆上开辟内存空间。new申请内存分配时无需指定内存块的大小,编译器会根据信息类型自动计算;malloc需要显示地指出所需内存的尺寸
- new申请内存分配成功后,返回的是对象类型的指针,类型严格与对象匹配,无需进行类型转化
malloc申请内存分配成功后返回的是void *,需要通过强制类型转换成我们需要的类型
-
new内存分配失败后,抛出bac_alloc异常,malloc内存分配失败返回NULL
-
new会先调用operator new函数,申请足够的内存空间,然后调用构造函数初始化成员变量,最后返回对象类型的指针。delete先调用析构函数,然后调用operator delete 释放内存。
malloc/free是库函数,只能动态的申请和释放内存
-
new/delete操作符能够重载,malloc不能重载
-
new在自由存储区上为对象动态分配内存空间,malloc从对上动态分配内存空间