(1)malloc和free是C语言中的函数,其函数原型在头文件
void *malloc(size_t size)
malloc函数是在堆中申请内存空间(不进行初始化),分配则返回任意类型的指针,所以我们一般在使用时都要进行类型转换,失败时返回NULL。例如:
char *p=(char *)malloc(sizeof(char)*100);
注意:在使用p指针时,最好对其返回值进行判断。
与malloc搭配使用的是free函数,进行内存的释放,否则容易造成内存泄漏。
void free(void *ptr)
(2)new和delete是C++中的运算符,不是库函数,不需要库函数的支持,它们是操作符。
new运算符在系统堆中申请内存空间,申请成功,返回内存的首地址,否则返回0。对于内置的数据类型,必须使用()来显示指定程序执行初始化操作,否则不进行初始化操作。如:
int *p=new int();
cout<<*p<<endl; //输出结果为:
int *p=new int;
cout<<*p<<endl; //输出结果为:
对于自定义的数据类型,在分配内存时,会调用相应的构造函数,同时delete会调用析构函数。
(3)delete和delete[]
首先,delete主要用于回收用new分配的单个对象的内存空间,回收用new[]分配的一组对象的内存空间的时候用delete[]。
特殊点:对于基本数据类型而言,由于基本数据类型没有析构函数,所以回收基本数据类型的数组空间时,用delete和delete[]都是可以的。