(1)new delete ,称为运算符;delete和free称作C的库函数
(2)new 不仅可以做内存开辟,还可以做内存初始化操作;malloc仅开辟内存;
(3)malloc开辟内存失败,是通过返回值和nullptr做比较;而new 开启内存失败,是通过抛bad_alloc类型的异常来判断的
#includedelete 和free区别#include int main() { int *p = (int *)malloc(sizeof(int));//分配内存 if (nullptr == p) { //判断返回值 return -1; } *p = 2;//初始化 free(p);//释放 int * p1; try { p1 = new int(2);//分配内存并初始化 } catch (const std::bad_alloc & e)//判断是否抛异常 { } delete p1; return 0; }
free 直接传入地址
delete [] p 释放数组;delete p 释放单个元素
new 的不同使用方式#include#include int main() { //1 抛异常new int * p1; try { p1 = new int(2);//分配内存并初始化 } catch (const std::bad_alloc & e)//判断是否抛异常 { } //2 不抛异常new int *p2 = new (std::nothrow)int();//不抛异常 //3 开辟常量内存 const int *p3 = new const int(40);//开辟一个常量 //4 定位new int data = 0; int *p4 = new(&data) int(50);//在指定地址内存初始化,本身并不开辟内存,只负责初始化 delete p1; delete p2; delete p3; delete p4; return 0; }



