c++中的new和delete

用法。

  • new初始化
    new int;开辟一个存放整数的存储空间,返回一个指向该存储空间的地址(即指针)。
    new int(100);开辟一个存放整数的存储空间,并指定该整数的初值为100,返回一个指向该存储空间的地址(即指针)。
int *p = (int *)malloc(sizeof(int));
*p = 10;
int *p2 = new int;//分配基础类型
*p = 20;    
int *p3 = new int(30);

new char[10];开辟一个存放字符数组的存储空间,返回首元素的地址(即指针)
new int[5][4];开辟一个存放二维整型数组的空间,返回一首元素的地址(即指针)

int *p = (int *)malloc(sizeof(int) * 10);
p[0] = 1;
free(p);
//c++分配数组
int *pArray = new int[10];
pArray[1] = 2;
delete [] pArray;//数组不要把[]忘记 

*float p = new float(3.14159)开辟一个存放单精度数的空间,并指定该实数的初值为3.14159,将返回该空间的地址(即指针)赋给指针变量p。

  • new和delete运算符使用格式:


    image.png
  • 用new分配数组空间时不能指定初值,用户可以根据指针的值判断分配空间是否成功。
  • 执行delete运算符时,在释放内存空间之前,自动调用析构函数,完成相关善后清理工作。

new、delelte和malloc、free的不同点

  1. c语言中malloc和free是库函数,
    c++中new和delete是运算符
  2. malloc不会调用类的析构函数,new能执行类的构造函数
    free不会调用类的析构函数,delete能执行类的析构函数
  3. new和delete操作符分配内存成功时返回对象类型的指针,分配失败时会抛出bac_alloc异常,不会返回NULL。
  4. 申请的内存所在位置: new从自由存储区上为对象动态分配内存,malloc函数从堆上动态分配内存
  5. new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算,而malloc需要显示的指出所需内存的尺寸malloc(sizeof(A))

你可能感兴趣的:(c++中的new和delete)