1、定义上
1-1、new的定义
new:是C++中的关键字(操作符),用于在堆(heap)上动态分配内存并自动调用对象的构造函数进行初始化。
new操作符返回一个指向分配内存的指针,其类型与所分配的对象类型一致,无需进行类型转换。
1-2、malloc的定义
malloc:是C语言(也适用于C++)中的一个库函数,用于在堆上动态分配内存。
malloc需要显式指定所需内存的大小(以字节为单位),并返回一个指向void的指针,该指针需要转换为合适的类型后才能使用。
malloc不会调用对象的构造函数,因此分配的内存是未初始化的。
2、类型安全性
new:返回的是具体类型的指针,无需类型转换,是类型安全的。
malloc:返回的是void*类型指针,需要转换为具体类型,存在类型不安全的隐患。
3、内存分配与初始化
new:不仅分配内存,还会调用对象的构造函数进行初始化。
malloc:只分配内存,不调用构造函数,分配的内存是未初始化的。
4、内存释放
new:分配的内存使用完毕后,应使用delete(或delete[]对于数组)来释放
malloc:分配的内存使用完毕后,应使用free来释放。
5、代码示例
#include<iostream>
using namespace std;
#include <stdio.h>
#include <stdlib.h>
int main() {
//1.malloc
int* ptr = (int*)malloc(sizeof(int)); // 分配内存,注意类型转换
if (ptr == NULL) {
return -1;
}
*ptr = 10;
cout << "ptr=" << *ptr<<endl;
free(ptr); // 释放内存
//2.new
int* p = new int(); //分配一块4字节的空间,进行初始化
*p = 5;
cout << "p=" << *p;
delete p;// 释放内存
return 0;
}
运行结果: