1、c++中有专门管理堆内存的语句,c语言中只能使用标准库提供的函数
new 分配内存,相当于malloc
delete 释放内存,相当于free
2、new在分配内存时允许对内存进行初始化
int* p=new int(val);
3、new/delete 不能与malloc/free 混合使用
int* p=new int;
free(p);//虽然语法支持,但是不要这样使用
使用new分配内存时会自动调用类、结构、联合的构造函数,而delete会自动调用他们的析构函数,malloc/free做不到
4、数组的分配和释放
new 类型[个数] 相当于连续分配多块相同类型的内存,类似于calloc,本质就是在堆内存分配了一个数组,并且它会自动调用构造函数
delete[] xxx; 专门用于释放 new[]所申请的内存,并且它会自动调用析构函数
注意:new/delete、malloc/free、new[]/delete[]不要混用
使用new[] 为类、结构、联合申请堆内存时,会在该段内存的前4个字节记录构造函数的调用次数,这样可以让编译器调用多少次析构函数
5、重复释放
delete可以释放空指针,但是不能重复释放,这点与free一致
6、内存分配失败
malloc分配失败则会返回 NULL
new分配失败则会抛出一个异常 std::bad_alloc 然后终止程序
7、new和malloc的返回值
malloc 返回一个void*类型的指针
new 会返回一个有类型的指针