区别
- (1)new/delete 是 C++的运算符,编译时需要加参数,malloc/free 是C语言中的函数,编译时需要头文件的支持
- (2)new 返回指定类型的指针,并且可以自动计算所需要大小,而 malloc 需要由我们计算字节数,并且在返回后强行转换为实际类型的指针
- (3)malloc 只管分配内存,并不对所得的内存进行初始化,而new 可以对所得到的内存进行初始化
- (4)new 会调用构造函数, malloc 不会调用构造函数
- (5)delete 会调用析构函数, free 不会调用析构函数
- (6)new/delete 都可以被重载,而malloc/free 都不可以被重载
- (new/delete是一对有的都有,malloc和free是一对啥都不调)
- (7)new 在分配内存失败时会抛出异常,而 malloc在分配失败的时候会返回NULL
-
new malloc delete free可以混合使用吗
(1)对于基本类型而言,没有区别。根据需要new和malloc 可以混用,new[]和malloc 可以混用,delete、 deletel[]和 free 可以混用。
(2)对于构造函数没有作用的类,new和malloc可以混用。
(3)对于没有显式定义析构函数的类,delete、 delete[]和 free可以混用。
(4)对于显式定义析构函数的类,delete[]和new[]必须配套使用,delete和free如果想混用,free需要显式调用析构函数。