C++中的new
运算符在功能上类似于C语言中的malloc
函数。它们都用于动态分配内存。但是,它们之间也存在一些细微的差异:
int *p=new int ;//创建int类型变量吗,new的结果是int*类型,将结果赋予p;
int *p=new int(10);//初始化了10;
int *p=new int[1100];在堆里创建了1100个int类型的数组;
delete p;
delete[] p;//释放内存
int *p=NULL;
int MAX_N=10;
p=(int*)malloc(sizeof(int)*n);
free(p);//释放内存
new
需要指定数据类型:new
运算符会根据所需的数据类型来分配内存空间,并返回适当类型的指针。而malloc
函数则无法自动识别所需的数据类型,因此需要显式地指定所需内存的大小。
new
调用构造函数:如果动态分配的内存是一个类对象,则使用new
将自动调用该类的构造函数初始化该对象。而malloc
仅分配内存空间,不会进行任何初始化操作。
new
抛出异常:如果new
无法分配所需的内存空间,它将引发std::bad_alloc
异常。而malloc
在失败时返回空指针(NULL)。
delete
和delete[]
与析构函数:使用new
分配的内存应该使用对应的delete
或delete[]
来释放,以调用适当的析构函数做必要的清理工作。而使用malloc
分配的内存应使用free
函数释放,它不会调用任何析构函数。在C++中,建议尽可能使用
new
和delete
,特别是在处理类对象时,因为它们提供了更好的类型安全性和语言特性的支持。