这里有一篇讲的很详细new和malloc的区别
总结一下:
1.new/delete是操作符,malloc/free是函数
2.malloc分配内存需指定大小,且只能是一般数据类型,分配成功返回void*,需要强制类型转换,分配失败返回NULL,需手动检查是否分配成功;new分配内存无需指定大小,可以为类对象,分配成功返回特定类型指针,分配失败抛出异常。
3.new分配内存,一般类型可以指定初始化,未初始化的保留其在内存中的原值;对象会调用其默认构造函数,也可以指定构造函数。
4.delete对象的指针时会调用其析构函数,而free则无法调用;delete指针之后一般还保留其原来的内存地址,再次使用出错,所以delete完之后需要赋值为NULL。
5.C++保留malloc的原因是C++有时需要使用C编写的库,而C中只能使用malloc,如果使用new会出现错误。
时间: 2024-10-07 07:36:25